JVM状态监控常用命令整理总结

JVM状态监控常用命令整理总结

java.lang.OutOfMemoryError: Java heap space这个错误表示JVM的新生代和老生代的内存不足。出现这个错误说明应用程序出现了内存溢出或者程序所需要的内存大于JVM的内存设置了。 遇到这个问题的时候,首先我们可以调节JVM的HEAP内存的大小,具体可以通过-Xms和-Xmx来进行设置,如果设置大以后还是会出现内存溢出,那么说明应用程序本身存在内存泄露,这个时候就需要我们对应用程序进行检查,找出导致内存泄露的地方,然后修正。 http://www.360doc.com/content/10/0301/13/57735_17193048.shtml 下面列出JVM状态监控的几个Java命令 1,查看JVM进程内存使用resource top top -p 6917 查看系统内存使用情况 free -m 2,查看堆内存使用情况 最大堆内存配置,年轻代EC/EU,FROM/TO,老年代OC/OU,永久代PC/PC的使用 jmap -heap 6917 此命令可查看使用的垃圾收集器配置. Parallel GC with 4 thread(s) http://www.cnblogs.com/0616--ataozhijia/p/4136312.html 查看JVM堆中对象详细占用情况 jmap -histo 6917 > jmaphisto1819.log https://my.oschina.net/feichexia/blog/196575 堆内存 = 年轻代 + 年老代 + 永久代 年轻代 = Eden区 + 两个Survivor区(From和To) 3,进程堆栈状态输出 线程阻塞或等待等状态 jstack 6917 > jstack1802.log 在发生死锁时可以用jstack -l pid来观察锁持有情况 http://blog.****.net/rachel_luo/article/details/8920596 http://jameswxx.iteye.com/blog/1041173 http://itindex.net/detail/48955-jstack-dump-%E6%97%A5%E5%BF%97 http://www.cnblogs.com/zhengyun_ustc/archive/2013/01/06/dumpanalysis.html 4,了解JVM堆内存使用和GC回收状态 250MS一次,执行4次. jstat -gc 6917 250 4 > /tmp/jvmgc25042216.log 5,查看JAVA进程 jps jps -v 查看进程启动时所带的JVM参数 6,进程内存使用情况dump到文件中 (1)jmap -dump:format=b,file=/tmp/dump.dat 6917 因生成转储文件大时很耗费系统资源,应避免系统高峰时运行此指令,否则会导致系统短暂无响应情况. (2)使用hPRof。启动虚拟机加入-Xrunhprof:head=site,会生成java.hprof.txt文件。该配置会导致jvm运行非常的慢,不适合生产环境。 (3)同10.在应用启动时配置相关的参数 -XX:+HeapDumpOnOutOfMemoryError,当应用抛出OutOfMemoryError时生成dump文件。 http://www.blogjava.net/mlh123caoer/archive/2011/10/04/360020.html 7,查看进程启动的参数配置 8,heap内存分析 jhat -J-Xmx1024M /tmp/dump.dat 执行后等待console 中输入start HTTP server on port 7000 即可使用浏览器访问 ip:7000 这个也就平时自己玩儿的时候用用,在生产环境就不太靠谱儿. http://lc87624.iteye.com/blog/1711071 Eclipse Memory Analyzer eclipse 市场查找安装. IBM HeapAnalyzer ftp://public.dhe.ibm.com/software/websphere/appserv/support/tools/HeapAnalyzer/ha456.jar D:\>java -Xmx512m -jar ha456.jar dumpserver12232.dat 9,生成线程堆栈信息 kill -3 后面跟上java进程的pid,这样就能生成 thread dump 了. 因为jvm已经hang了,所以有时候kill -3看不到线程栈是正常的。 http://hllvm.group.iteye.com/group/topic/39570 10,堆内存溢出时保存线程堆栈到文件中HeapDumpOnOutOfMemoryError  在jvm的 启动参数中追加 下列信息,可以在发生 OutOfMemoryError的时候生成 oom.hprof文件 catalina.sh添加: JAVA_OPTS="$JAVA_OPTS -Xmx52m -Xms52m -XX:PermSize=25m -XX:MaxPermSize=25m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/tomcat8093.dump" http://blog.****.net/jiangguilong2000/article/details/8476361 11,查看运行JVM进程时指定的参数 jinfo -flags 6917 jinfo 6917 jinfo -flag MaxNewSize 6917 http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html 12,选择垃圾收集器 http://blog.****.net/historyasamirror/article/details/6233007 13,调优总结 xms xmx xmn xss http://unixboy.iteye.com/blog/174173/