其他分享
首页 > 其他分享> > JVM的问题排查(自己总结)

JVM的问题排查(自己总结)

作者:互联网

 一.对于JVM服务可能出现的问题,我们一般依次排查内容为:
    (1). 宿主机器问题
    (2). JVM内存,是否频繁GC
    (3). 线程栈,是否线程暴涨,线程死锁
    (4). 排查日志,检查程序代码
解决思路:

1.宿主机问题

top -p ${pid}  内存和cpu使用情况

top -H -p ${pid}  查看进程关联线程情况

2.JVM堆使用情况和GC问题


jmap -heap ${pid}  系统的堆的情况

jmap -histo ${pid}   哪些实例占用内存情况,这个命令一般这样用:jmap -histro 12345|head -n 10

jmap -histo ${pid} | grep ${package}  一般都是具体到包名

jstat -gcutil ${pid} 1000 10    查询每个堆分代的内存占用情况和young GC和Full DC次数和时间。


3.线程栈定位线程问题

4.排查日志,检查程序代码

二.

1.高CPU占用:

最后,总结下排查CPU故障的方法和技巧有哪些:

1、top命令:Linux命令。可以查看实时的CPU使用情况。也可以查看最近一段时间的CPU使用情况。

2、PS命令:Linux命令。强大的进程状态监控命令。可以查看进程以及进程中线程的当前CPU使用情况。属于当前状态的采样数据。

3、jstack:Java提供的命令。可以查看某个进程的当前线程栈运行情况。根据这个命令的输出可以定位某个进程的所有线程的当前运行状态、运行代码,以及是否死锁等等。

4、pstack:Linux命令。可以查看某个进程的当前线程栈运行情况。

2.高内存问题


最后,总结下排查内存故障的方法和技巧有哪些:

1、top命令:Linux命令。可以查看实时的内存使用情况。  

2、jmap -histo:live [pid],然后分析具体的对象数目和占用内存大小,从而定位代码。

3、jmap -dump:live,format=b,file=xxx.xxx [pid],然后利用MAT工具分析是否存在内存泄漏等等


三.sFull GC的原因:

1.程序执行了System.gc() //建议jvm执行fullgc,并不一定会执行
2.执行了jmap -histo:live pid命令 //这个会立即触发fullgc
3.在执行minor gc的时候进行的一系列检查
4.使用了大对象 //大对象会直接进入老年代
5.在程序中长期持有了对象的引用 //对象年龄达到指定阈值也会进入老年代

补充:java虚拟机常见参数设置:Java虚拟机之常见参数配置_supermao1013的专栏-CSDN博客_java 虚拟机参数

      linux中查看文件夹的大小:linux怎么查看一个文件夹的大小_百度知道https://zhidao.baidu.com/question/1178566665695139419.html

标签:总结,查看,命令,pid,排查,线程,内存,JVM,jmap
来源: https://blog.csdn.net/xajh_czbk/article/details/122810057