java事故排查

top:查看CPU负载                                                                                                                                                                                    

free :查看内存使用情况

                     total        used         free        shared      buffers       cached
Mem:       3859356    3697132     162224         12     107688    1724812
-/+ buffers/cache:    1864632    1994724
Swap:      4194300      79932    4114368
 

df:查看磁盘使用情况

Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/vda1        3997376   778440   3009224  21% /
tmpfs            4026828        0   4026828   0% /dev/shm
/dev/vda2        3997376    24544   3763120   1% /home
/dev/vda5       24637820 19741428   3638204  85% /usr
/dev/vda3        3997376   232628   3555036   7% /var
 


排除磁盘情况后,如果CPU负载特别高: Java 进程,并不做大量 CPU 运算,正常情况下,CPU 应该在 100~200% 之间,出现这种 CPU 飙升的情况,要么走到了死循环,要么就是在做大量的 GC

使用 jstat -gc pid [interval] 命令查看了 java 进程的 GC 状态:

jstat -gc <pid>: 可以显示gc的信息,查看gc的次数,及时间。

GC非常频繁的情况下应该是内存泄漏:

 使用 jstack pid > jstack.log 保存线程栈;

 使用 jmap -dump:format=b,file=heap.hprof  pid 保存堆现场;

提示:堆文件导出比较大,并且默认是二进制数据,可以使用JDK自带工具例如:(jvisualvm)进行分析

补充:获取JVM的dmp文件有两中方式:

        1. JVM启动时增加两个参数,出现 OOME 时生成堆 dump: 

                -XX:+HeapDumpOnOutOfMemoryError

                生成堆文件地址:

                -XX:HeapDumpPath=/home/test/jvmlogs/ 

        2. 发现程序异常前通过执行指令,直接生成当前JVM的dmp文件

                jmap -dump:live,format=b,file=/opt/soft/heap.hprof  pid

第一种方式在JVM出现内存溢出是自动生成堆文件,第二种方式在执行时,JVM是暂停服务的,所以对线上的运行会产生影响,所以推荐使用第一种方式;

 


以上步骤均为帮助快速排查问题,定位问题的方式,具体解决问题仍需要分析具体代码

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值