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 (编辑:哈尔滨站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Win10任务管理器无法完全显示解决方法
- windows-server-2008 – 远程桌面会话突然以“协议错误”结
- windows-server-2008 – 单向网络连接
- windows-server-2008 – Windows Server 2008:当NIC有多个
- 使用Windows容器而不是Linux容器的优点和缺点?
- 三种实用方法解决Linux动态库依赖问题
- windows – 以正常方式安装RDS与特殊RDS部署选项之间的区别
- localhost – Microsoft环回适配器的目的是什么?
- remote-desktop – 在RemoteApp 2012上委派会话管理
- 到底什么是Linux内核?2000多字精华解释

