性能分析之软中断异常排查原创
一、问题现象
小伙伴反映压测过程中,应用服务器资源有异常。对服务器的TOP打印结果如下图所示
对TOP图进行分析,可以拿到几组数据
1、us的利用率大约在70%左右
2、sy的利用率大约在10%左右
3、si软中断的利用率大约在20%-30%之间,很高
4、8核的机器,load负载最高已经到了70,很高
5、Wa为0,内存使用率不高,说明资源没有太大的压力
二、问题判断
对几组数据进行综合分析,可以有一些基本判断
1、软中断高而硬中断不高,wa不高,说明不是网卡中断或磁盘的缺页中断导致
2、sy利用率在10%左右,而软中断是在内核层面的操作。那么有下面几种可能
-
代码频繁调用了某些内核函数,比如yield之类的,不停地切换cpu;
-
内核频繁的在做日志读写;
-
内核频繁的读取某些配置文件或者缓存文件失败导致死循环;
3、考虑到负载已经到了70,很明显是线程出现了阻塞。所以很有可能是线程在内核层面读取配置文件失败导致的异常现象
性能测试知识库三、问题定位
Top -H -p pid获取子线程信息,拿到子线程之后再打印系统调用日志
strace -tt -T-v -f -e trace=file -o /tmp/strace.log -s 1024 -p {TID}
四、日志解读
这是一个系统调用的日志,做如下解读
1、内核试图通过lstat函数读取/tmp/tomcat-docbase.8014904651672037141.8087/v2这个目录的信息,但是没找到,因此无法编译内存指令
2、内核反复通过resumed这个函数去恢复提交内存指令,然后让lstat读取,但是依然找不到内容
3、Resumed是中断恢复指令,因为找不到对应的目录内容,无法编译内存指令集,内核于是陷入死循环,线程阻塞
检查tmp下面的目录,发现tomcat-docbase.8014904651672037141.8087下面是空的,没有V2这一层级,也有可能是无权限写入,需要开发配合检查一下、