性能文章>一次线上CPU软中断异常分析>

一次线上CPU软中断异常分析原创

2年前
313345

问题现象

小伙伴反映压测过程中,应用服务器资源有点异常。对服务器的TOP打印结果如下图所示
image.png

对TOP图进行分析,能拿到几组数据

  • us的利用率大约在70%左右
  • sy的利用率大约在10%左右
  • si软中断的利用率大约在20%-30%之间,很高
  • 8核的机器,load负载最高已经到了70,很高
  • Wa为0,内存使用率不高,说明资源没有太大的压力

问题判断

对上面几组数据进行综合分析,可以有一些基本判断。
软中断很高而硬中断不高,wa也不高,说明不是网卡中断或者磁盘的缺页中断导致。
sy利用率在10%左右,而软中断是在内核层面的操作。那么有几种可能
代码频繁调用了某些内核函数,比如yield之类的,不停地切换cpu;
内核频繁的在做日志读写;
内核频繁的读取某些配置文件或者缓存文件失败导致死循环;
考虑到负载已经到了70,很明显是线程出现了阻塞。所以很有可能是线程在内核层面读取配置文件失败导致的异常现象

问题定位

Top -H -p pid 获取子线程信息,拿到子线程之后再打印系统调用日志

strace -tt -T -v -f -e trace=file -o /tmp/strace.log -s 1024 -p {TID}

image.png

日志解读

这是一个系统调用的日志,做如下解读
内核试图通过lstat函数读取了/tmp/tomcat-docbase.8014904651672037141.8087/v2这个目录的信息,但是没找到,因此无法编译内存指令。

内核反复通过resumed这个函数去恢复提交内存指令,然后让lstat读取,但是依然找不到内容

Resumed是中断恢复指令,因为找不到对应的目录内容,无法编译内存指令集,内核于是陷入死循环,线程阻塞
检查tmp下面的目录,发现tomcat-docbase.8014904651672037141.8087下面是空的,没有V2这一层级,也有可能是无权限写入,需要开发配合检查一下。
image.png

点赞收藏
飞天小子

13软件测试,10年性能测试,5年性能培训,10万字性能博主,项目经理,微信uhz2008

请先登录,查看4条精彩评论吧
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步
5
4