开启辅助访问 切换到窄版

打印 上一主题 下一主题

运维开发必备:如何排查Linux系统故障?

[复制链接]
作者:荀家舍 
版块:
嵌入式操作系统 linux 发布时间:2020-5-27 18:26:51
8320
楼主
跳转到指定楼层
| 只看该作者 回帖奖励 |倒序浏览 |阅读模式
和Linux打交道、在服务器上分析系统性能是每个Linux运维工程师或云计算开发人员的工作日常,而性能优化被看做是软件系统中最有挑战的工作之一,让工作人员很是头疼。下面千锋广州小编就为大家分享云计算学习中快速排查线上Linux系统故障的方法。


Linux性能优化是个系统工程,除了要学习那些基础知识点之外,还有2点比较重要:
1)掌握性能优化的思路和方法,尝试大量Linux性能工具;
2)从学习到输出,即不断实践、从实践中总结经验。只有理论知识与实践相结合,你才能把观察到的性能问题跟系统原理关联起来。
线上Linux系统故障的原因通常包括以下几个方面:
一、CPU使用率过高
一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。排查技巧如下:
1)通过top命令定位占用CPU高的进程。比如进程PID41843占用CPU过高,明显存在问题,定位到了进程id。当然如果你想只观察进程PID41843的CPU和内存以及负载情况,可以使用命令:top -p 41843
2)通过top命令定位问题进程中每个线程占用CPU情况。使用命令:top -p 41843 -H
3)通过jstack 命令定位问题代码。比如发现线程PID41892占用的CPU过高,就将这个PID转换成16进制,其中PID41892转化成16进制为a3a4。使用如下命令命令定位问题代码:jstack 41892 | grep a3a4
二、内存占用过高
在Java开发中,常见的异常及解决方法如下:
java.lang.OutOfMemoryError: PermGen space
异常出现原因:应用中有很多CLASS的话,就很可能出现PermGen space错误。WEB或者APP用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)就会产生此错误信息。
解决方法:调整PermSize、MaxPermSize的大小;减少jar重复使用,重复占用内存。
java.lang.OutOfMemoryError: Java heap space
异常出现原因:在JVM中,如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。
异常原因排查步骤:
1)通过jstat命令查询gc情况。通过top命令定位到内存占用过高的进程PID后,排查该进程的GC情况,命令:jstat -gccause 41843 2000
2)通过jmap命令查询进程实体类内存占用情况。如果步骤1中发现,gc非常频繁,则可以使用jmap命令查询进程实体类内存占用情况。命令:jmap -histo:live 41843 | head -n 100
3)通过jmap命令查询进程堆的使用情况。如果以上没有查出问题,可以看看进程中,新生代、老年代、永久代的使用情况。命令:jmap -heap 41843
如果发现频繁的gc是因为新生代、老年代、永久代分配的大小有问题,则可以通过修改设置解决。
永久代解决方法:调整PermSize、MaxPermSize的大小;减少jar重复使用,重复占用内存。
新生代、老年代解决方法:调整Xms -Xmx -Xmn的大小。
以上就是千锋广州小编今天分享的内容,希望对大家有帮助哦!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表