原先的博客由于腾讯云的服务器到期了,续费发现挺贵的就停了。 后面觉得还是得有个地方记录一下生活。 之前使用的是halo,用了挺长时间的,后面想想自己的博客也不需要那么多功能,一个静态的就足够了。 所以就换到了hugo,用的主题是PageMod,挺符合我的直男审美。 搭建起来挺简单的,就是需要安装hugo和主题,然后配置一下,然后就可以运行了。 最后是在cloudflare上部署的,很简单。默认的hugo版本比较旧,需要在环境变量里指定下版本号。HUGO_VERSION: 0.139.2. 部署指南 后续慢慢把之前的博客迁移过来。

2024-11-28 · 1 min · 9 words · aircold

记一次xxl-job版本不兼容导致磁盘io高的排查解决过程

1.收到运维同事消息,某台服务器磁盘io过高 2.使用pidstat 工具查询磁盘IO情况 # -p 指定进程号 # 4883 即进程号 紧跟 -p后面 # -t 展示进程下的线程资源占用情况 # -d 展示进程下的线程IO占用情况 # 1 每秒刷新1次 # 3 共刷新三次 [root]# pidstat -p 23218 -t -d 1 3 查询到是TID24151的线程数据异常(此处截图未包含异常线程信息) 3.使用jstack工具打印堆栈信息 # 4833 进程号 # > jstack.text 将堆栈信息打到 jstack.text 文件中 [root]# jstack 23218 > jstack.text 4.根据线程ID(24151),在jstack.text中查询对应的堆栈信息 注意 此处根据 pidstat获取的线程号是 十进制。但是 jstack打印的堆栈信息中的nid是 十六进制,因此需要做一层进制转换,24151转十六进制为5e57 判断是xxl-job TriggerCallbackThread 线程异常 "Thread-57" #151 daemon prio=5 os_prio=0 cpu=4531531.18ms elapsed=87881.21s tid=0x00007f79edd9f160 nid=0x5e57 waiting on condition [0x00007f79609aa000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep([email protected]/Native Method) at java.lang.Thread.sleep([email protected]/Thread.java:337) at java.util.concurrent.TimeUnit.sleep([email protected]/TimeUnit.java:446) at com.xxl.job.core.thread.TriggerCallbackThread$2.run(TriggerCallbackThread.java:121) at java.lang.Thread.run([email protected]/Thread.java:833 5.追踪xxl-job源码排查问题 ...

2024-11-29 · 2 min · airocld

记一次MySQL字符串类型末尾包含空格导致的问题

记一次MySQL字符串类型末尾包含空格导致的问题 起因: 测试同事反映自动化测试数据没有展示出来 排查发现是python统计脚本插入数据时,有唯一键索引错误 sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError) (1062, "Duplicate entry 'xxx' for key 'xxx_key'") 而这些数据是从ClickHouse中GroupBy之后,写入MySQL。 ClickHouse中数据: id new_version old_version 1 v1 ‘v2’ 2 v1 ‘v2 ’ (尾部有一个空格) 执行的SQL SELECT new_version, old_version FROM tablexxx GROUP BY new_version, old_version; clickhouse中的结果 new_version old_version v1 v2 v1 v2 由于是在腾讯云的控制台上执行的SQL,所以结果中显示的‘v2’都是一样的,感到十分不解。后面转了Base64后才发现有所不同。 既然不相同,为什么插入MySQL还会报错呢? 在MySQL中制造模拟数据执行上述SQL后发现如下结果: MySQL中的结果 new_version old_version v1 v2 MySQL中的结果只有一条!!! 在stackoverflow上找到了一个类似的问题,先上地址:url 结论: 根据 MySQL 的默认设置,对于字符串类型的列,尾部的空格会被忽略,因此 ‘v2 ’ 和 ‘v2’ 在比较时被认为是相等的。 MySQL官方手册里的说明 大意就是MySQL校对规则有一个pad属性,默认采用“PAD SPACE”。只有某些基于UCA9.0.0或之上的Unicode校对规则是“NO PAD”。 ...

2024-11-29 · 1 min · airocld

记一次Redis云服务命令兼容性问题

先贴一下报错 Caused by: org.redisson.client.RedisException: ERR request failed to route, command 'wait'. channel: [id: 0x435ad7b4, L:/10.0.0.34:59660 - R:10.0.0.16/10.0.0.16:7000] command: (WAIT), promise: java.util.concurrent.CompletableFuture@49043da0[Not completed], params: [1, 1000] at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:370) at org.redisson.client.handler.CommandDecoder.decodeCommandBatch(CommandDecoder.java:271) at org.redisson.client.handler.CommandDecoder.decodeCommand(CommandDecoder.java:210) at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:137) at org.redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:113) 使用环境 JDK17 redisson3.17.5版本 腾讯云Redis5.0内存版(集群架构) 业务代码 RReadWriteLock readWriteLock = redissonClient.getReadWriteLock(RedisKey.REDISSON_LOCK_PREFIX + No); RLock rLock = readWriteLock.writeLock(); try { rLock.lock(); //处理业务 修改订单状态 记录支付日志 } finally { rLock.unlock(); } 排查过程 1.测试环境是单机版,生产环境是集群,怀疑是配置有误。 后将测试环境的redis换成手动搭建的集群环境,发现并没有问题 2.怀疑是云服务的redis有些配置,和自己搭建的不一致,但是并没有具体方向 3.进入redis的GitHub查看是否有相似问题 4.在Issues 中发现了同样的报错 他用的阿里云的Redis云服务,因为用的是代理模式,所以会有此问题。相关地址 腾讯云使用的也是代理模式,所以我觉得突破点,就是这儿。 5.随后找到腾讯云的文档,发现是支持的。相关文档 6.因为文档是最近更新的,怀疑是不是某个新版本才可以 ...

2024-11-29 · 1 min · airocld

【坑】INSERT IGNORE 会截断字符长度直到可以插入数据库

INSERT IGNORE和STRICT模式 当STRICT模式打开时,如果您尝试将无效值使用INSERT插入表中,MySQL将返回错误并中止语句。 但是,如果您使用INSERT IGNORE语句,MySQL将发出警告而不是错误。此外,在将值添加到表之前,它将尝试调整值以使其有效。 请考虑以下示例。 首先,我们创建一个的新表名为tokens: CREATE TABLE tokens ( s VARCHAR(6) ); 在此表中,列s仅接受长度小于或等于6的字符串。 其次,将长度为7的字符串插入tokens表中。 INSERT INTO tokens VALUES('abcdefg'); MySQL发出以下错误,因为严格模式已启用。 ERROR 1406 (22001): Data too long for column 's' at row 1 第三,使用INSERT IGNORE语句插入相同的字符串。 INSERT IGNORE INTO tokens VALUES('abcdefg'); MySQL在将数据插入tokens表之前截断了数据。此外,它会发出警告。 +---------+------+----------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------+ | Warning | 1265 | Data truncated for column 's' at row 1 | +---------+------+----------------------------------------+ 1 row in set (0.00 sec) 数据库结果 SELECT * FROM `tokens`;

2024-11-29 · 1 min · airocld