记一次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源码排查问题 ...