在线Linux系统故障排除的几个技巧

发布者:上海IT外包来源:http://www.lanmon.net点击数:1077

无论是开发还是操作和维护,处理Linux都是每个技术人员的日常生活。但是,性能优化和故障排除也是软件系统中最具挑战性的任务之一。阅读了多少信息和书籍,一旦解决了具体问题,它就像是一记耳光,如:
在高峰流量期间,服务器CPU使用率过高。登录到Linux后,您不知道如何进一步找到它。系统中的CPU资源是否太少,或者程序的并发部分是否存在问题?
系统没有运行任何程序来吃内存,但是在敲掉free命令之后,它发现没有内存,到底哪里有内存占用?为什么?
我很早就收到了Zabbix报警器。如果发现保存监视数据的数据库主机CPU具有更高的I/O等待,您会怎么做?
以下是使用过多CPU的一些故障排除提示:
1,通过top命令定位占用cpu的进程高
执行top命令以获得以下结果:
在线Linux系统故障排除的几个技巧
从上图可以清楚地看出,进程PID41843占用的CPU太高,显然存在问题,并且进程id被定位。当然,如果只想观察过程PID41843的CPU和内存以及负载情况,可以使用以下命令
Top -p 41843
结果如下:
在线Linux系统故障排除的几个技巧
2,通过top命令定位问题进程,每个线程占用cpu情况
您可以使用以下命令为问题进程中的每个线程使用cpu案例:
顶部-p 41843 -H
查看进程PID41843的每个线程的CPU状态,如图所示。
在线Linux系统故障排除的几个技巧
从上图可以清楚地看出,线程PID41892 CPU占用率最高,然后定位线程的代码异常,导致CPU占用过高。
3.使用jstack命令找到问题代码
前一步发现PID41892占用的CPU太高,它会将这个PID转换成十六进制,很容易知道,PID41892被转换为a3a4的十六进制。使用以下命令命令查找问题代码:Jstack 41892 | grep a3a4
输出如下:
'thread'中的'thread'prio=10 tid=0x00007f950043e000 nid=0x54ee;
可以分析:线程Thread下的wait()函数cpu使用率非常高。检查源代码中的test()函数代码,如下所示:
在线Linux系统故障排除的几个技巧
while循环不能结束,它总是抓取cpu,导致程序cpu使用得太高,修改代码。
IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部