Linux系统线上故障排查的几种技巧
无论是开发还是运维,和 Linux 打交道是每个技术人的日常。然而,性能优化、故障排查也是软件系统中最有挑战的工作之一,甭管看了多少资料和书,一旦涉及到解决具体问题,照样儿一脸懵逼,比如:
下面,介绍几个 CPU 使用率过高的排查技巧: 1、通过top命令定位占用cpu高的进程 执行top命令得到以下结果: 通过上图可以明显看出进程PID41843占用cpu过高,明显存在问题,,定位到了进程id。当然如果你想只观察进程PID41843的CPU和内存以及负载情况,可以使用以下命令
结果如下: 2、通过top命令定位问题进程中每个线程占用cpu情况 通过问题进程中每个线程占用cpu情况使用可以使用如下命令:
查看进程PID41843的每一个线程占用CPU情况,如图。 由上图明显可以发现,线程PID41892CPU占用率最高,接下来定位该线程的代码是否出现异常导致cpu占用过高。 3、通过jstack 命令定位问题代码 上一步发现PID41892占用的CPU过高,就将这个PID转换成16进制,易知,PID41892转化成16进制为a3a4。使用如下命令命令定位问题代码:
输出如下:
可以分析得到: 线程Thread下的wait()函数cpu使用率很高,查看源代码中的test()函数代码如下: while循环无法结束,一直抢占cpu,导致程序cpu使用过高,修改代码即可。 当然了,除了cpu以外,还有很多其它问题,这种类似的排查经验只能从实践中总结,原理书是不会告诉你这些的。几年前,我自己学习那会儿也看了不少书,尝试从网上找过些零零散散的资料。但说真的,Linux 性能优化是个系统工程,除了要学习那些基础知识点之外,还有 2 点比较重要:
【编辑推荐】
点赞 0 (编辑:宜春站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |