一 后台服务器问题排查步骤
java后台服务故障排除网络与硬件故障外;可能出现以下问题:
1),CPU过高:例如gc频繁,代码循环逻辑,高并发;
2),内存过高:例如频繁创建对象,内存泄露等这里会有俩种情况,一种报oom,一种导致系统卡,访问等待.
3),IO过高:例如持续磁盘读写,这种情况目前还没有发生过;
4), 硬盘空间满了,这种情况一般系统访问不了;好排查;
针对以上情况我们有以下定位问题步骤
二 cpu过高
CPU过高一般是有gc频繁或代码里有循环逻辑导致;
第一步: top命令定位进程确认是哪个进程耗cpu
输入top
按P – 以 CPU 占用率大小的顺序排列进程列表
按M – 以内存占用率大小的顺序排列进程列表
第二步:查找具体的线程
ps -mp 《PID》-o THREAD,tid,time | sort -rn
第三步: jstat 判断是否gc频繁
jstat -gc PID
第四步: jstack打印线程堆信息
jstack PID
jstack PID| grep $(printf “%x\n” TID) -A 10
如果是gc频繁 看jvm 内存分配大小是否合理,是否需要重新分配大小
大小合理,新生代老年的gc比例合理吗?不合理,看gc后内存是否有释放,没有,内存泄露或线程过多 导内存dump分析对象数量大小,系统上限流;
Jmap -heap PID 看内存分配情况
Jmap -dump:format=b,file=/usr/x.dump PID必要时可以导出内存文件分析
第三步 jstat PID判断是否循环逻辑导致
打印JVM里全部线程状态,观察线程状态,活跃线程的执行系统内容;
二 内存过高
第一步 定位耗内存线程 一般是Java项目线程,病毒(挖矿程序)
Top
第二步 分析JVM内存分布,各个代使用率情况,gc回收情况,可能分布不合理;
jstat -gc PID
查看堆内存使用情况
jmap -heap 71614
jmap -heap 进程号
第三步 导出dump;使用分析工具分析对象
jmap -dump:live,format=b,file=dump.hprof PID