关于 Linux 下 JVM 故障分析

来源:互联网 发布:支付宝解除淘宝绑定 编辑:程序博客网 时间:2024/06/05 16:38


在过去的几年JAVA 开发中经常碰到各种问题;


特别是对于JVM内存异常,线程异常;刚开始经常出现不知道如何处理;


做下常见的问题分析:


一.出现CPU 100% 的情况:


有时候很坑爹的发现部署到线上的实例跑着跑着 cpu就飙到100%

首先开到服务器上:

1.命令:top  看下 最高的cpu的进程ID

2.命令: top -H -M -p 32708 查看进程内各线程的消耗记录下消耗最大的线程ID



第二步
jstack 32708
jstack [PID:进程id] 



这样可以查到是你JVM中哪个线程导致的cpu飙升;
对应的去代码里面把那几行该死的问题解决掉;


二. 单出现内存溢出的情况下:

一般都是JVM的内存配置异常导致的内存溢出;当然还有就是你代码里面乱用;比如将类丢到静态的Map 最后将内存撑爆;

简单的情况下:

命令: jmap -heap 12758
描述:  jmap -heap [进程id]  查看java进程当前JVM 堆内存的使用情况



命令:jinfo 18349  
描述:jinfo [进程id]  查看java进程的jvm配置信息  


拉到最底下可以看到 你配置的JVM的各堆的信息;一般调大一点就行;

调配原则 可以找度娘 查下很多;

配置方式:
tomcat 下配置内存
Linux:
tomcat  / bin  目录下  catalina.sh 文件

vi   catalina.sh

添加: JAVA_OPTS="-Xms10240m -Xmx10240m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m ”
 
Windows :

catalina.bat
rem ----- Execute The Requested Command ---------------------------------------
set JAVA_OPTS=-Xms128m -Xmx350m 






0 0