作者: uNDeaD
Email: someonebw@gmail.com
Blog: http://blog.youkuaiyun.com/undead
转载请注明出处
异常情况:
湖北移动 168 的机器发型异常情况,就是 Bwisp ,主容器的进程 CPU 占有率一直保持在 50 %,
高居不下,和其他省份的主容器 CPU 占用保持在 1 %,相差了近 50 倍,遂进一步来查明原因
1. 监控系统,发现问题
通过系统自带的监控系统资源占用命令: prstat
执行结果:(此图 bwisp 主容器进程正常)
2.查看是此进程的哪个线程导致,通过命令 prstat 的微观模式来查看此进程的情况,出问题的时候,此进程的 PID 为 22376 ,执行命令: prstat -mL –p 22376 2 ,执行结果如图:
3. 可以看到此进程中,的第 37 线程,占用情况达到了 93 %,很可能有问题,不正常!
通过系统命令 pstack 命令,来看看此进程中, 37 线程,调用的具体函数
执行命令: pstack 22376 ,执行结果如下:(列出关键部分)
---------------------------------------------------------
----------------- lwp# 37 / thread# 37 --------------------
fee45c98 __time (faffbf74, 1, 0, fc6b8, 0, fb072ec4) + 8
fb054354 _Z13checkAndWritePv (0, 0, 0, 2, fb0542d4, fb05b738) + 80
fee457f8 _lwp_start (0, 0, 0, 0, 0, 0)
---------------------------------------------------------
大家可以看到,标红的地方,就是 37 线程当前调用的函数,标记黄色的地方,就是出问题的函数调用,下一步,我们需要此处内存,具体分配给了哪个插件使用!
通过系统的 pmap 命令,得到系统的内存分配映射情况,执行命令: pmap -x -s 22376
得到如下结果:
通过上一步我们可以判断,出问题的地方为:
fb054354 _Z13checkAndWritePv (0, 0, 0, 2, fb0542d4, fb05b738) + 80
系统分配的为 fb05 开头的内存空间,
可以看到 pmap 后,标红的地方为:
FB030000 72 72 - - 8K r-x-- libywdata.so
FB042000 8 8 - - - r-x-- libywdata.so
FB044000 8 8 - - 8K r-x-- libywdata.so
FB046000 8 8 - - - r-x-- libywdata.so
FB048000 80 80 - - 8K r-x-- libywdata.so
FB06A000 16 16 16 - 8K rwx-- libywdata.so
FB06E000 16 8 - - - rwx-- libywdata.so
FB072000 8 8 8 - 8K rwx-- libywdata.so
FB03 - FB07 的空间,都分配给了 libywdata.so 插件, FB05 在其之间,可以判断
出问题的插件,应该就是 libywdata.so 文件了!
将相应的命令执行后的情况,发给相关开发人员后,开发人员迅速定位问题的所在,此 BUG 迅速解决!