环境:MAC OS X 10.11.5 + Oracle JDK 1.7.0_80
JDK 7 以后,多了 jcmd 这个小工具,它的功能很多,可以导出 Heap Dump,导出 Thread Dump,查看 java 进程,最重要的是可以执行 GC 。
在分析内存泄露时,可以先后执行两次 Heap Dump 和 Thread Dump,在两次执行之间,可以执行一次 GC。
如果在执行 GC 后,还依旧存在的大对象,将作为重点内存泄露对象;还依旧执行的线程,将作为重点怀疑对象。
1. 列出当前所有运行的 java 进程:jcmd -l
2. 列出当前运行的 java 进程可以执行的操作:jcmd PID help
比如:jcmd 17249 help
17249:
The following commands are available:
VM.native_memory
VM.commercial_features
GC.rotate_log
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
Thread.print
GC.class_histogram
GC.heap_dump
GC.run_finalization
GC.run
VM.uptime
VM.flags
VM.system_properties
VM.command_line
VM.version
help
3. 查看 JVM 的启动时长:jcmd PID VM.uptime
4. 查看 JVM 的类信息:jcmd PID GC.class_histogram
这个可以查看每个类的实例数量和占用空间大小。
5. 查看 JVM 的Thread Dump:jcmd PID Thread.print
6. 查看 JVM 的Heap Dump:jcmd PID GC.heap_dump FILE_NAME
注意,如果只指定文件名,默认会生成在启动 JVM 的目录里。
7. 查看 JVM 的属性信息:jcmd PID VM.system_properties
8. 查看 JVM 的启动参数:jcmd PID VM.flags
注意,可以看到 -X 和 -XX 的参数信息,比较有用。
9. 查看 JVM 的启动命令行:jcmd PID VM.command_line
10. 对 JVM 执行 java.lang.System.runFinalization():jcmd PID GC.run_finalization
尽量去调用这个对象的finalize方法。
11. 对 JVM 执行 java.lang.System.gc():jcmd PID GC.run
告诉垃圾收集器打算进行垃圾收集,而垃圾收集器进不进行收集是不确定的。
12. 查看 JVM 的性能:jcmd PID PerfCounter.print
参考文献:
1. http://blog.csdn.net/winwill2012/article/details/46364849
JDK 7 以后,多了 jcmd 这个小工具,它的功能很多,可以导出 Heap Dump,导出 Thread Dump,查看 java 进程,最重要的是可以执行 GC 。
在分析内存泄露时,可以先后执行两次 Heap Dump 和 Thread Dump,在两次执行之间,可以执行一次 GC。
如果在执行 GC 后,还依旧存在的大对象,将作为重点内存泄露对象;还依旧执行的线程,将作为重点怀疑对象。
1. 列出当前所有运行的 java 进程:jcmd -l
2. 列出当前运行的 java 进程可以执行的操作:jcmd PID help
比如:jcmd 17249 help
17249:
The following commands are available:
VM.native_memory
VM.commercial_features
GC.rotate_log
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
Thread.print
GC.class_histogram
GC.heap_dump
GC.run_finalization
GC.run
VM.uptime
VM.flags
VM.system_properties
VM.command_line
VM.version
help
3. 查看 JVM 的启动时长:jcmd PID VM.uptime
4. 查看 JVM 的类信息:jcmd PID GC.class_histogram
这个可以查看每个类的实例数量和占用空间大小。
5. 查看 JVM 的Thread Dump:jcmd PID Thread.print
6. 查看 JVM 的Heap Dump:jcmd PID GC.heap_dump FILE_NAME
注意,如果只指定文件名,默认会生成在启动 JVM 的目录里。
7. 查看 JVM 的属性信息:jcmd PID VM.system_properties
8. 查看 JVM 的启动参数:jcmd PID VM.flags
注意,可以看到 -X 和 -XX 的参数信息,比较有用。
9. 查看 JVM 的启动命令行:jcmd PID VM.command_line
10. 对 JVM 执行 java.lang.System.runFinalization():jcmd PID GC.run_finalization
尽量去调用这个对象的finalize方法。
11. 对 JVM 执行 java.lang.System.gc():jcmd PID GC.run
告诉垃圾收集器打算进行垃圾收集,而垃圾收集器进不进行收集是不确定的。
12. 查看 JVM 的性能:jcmd PID PerfCounter.print
参考文献:
1. http://blog.csdn.net/winwill2012/article/details/46364849
没有评论:
发表评论