jmap
将堆内存取下来,用来分析。
jmap -F -dump:live,format=b,file=12044.bin 12044
注:Windows下出现如下这个错误。
Attaching to process ID 12044, please wait…
Error attaching to process: Windbg Error: GetModuleParameters failed!
主要原因就是Path的JDK版本是32位的,但是系统确是64位的。
jhat
分析堆内存文件,这仅仅是一个工具,有很多更好用的堆内存分析工具。
如:IBM HeapAnalyzer,Eclipse Memory Analyzer tool(MAT),JProfiler(非常好用,需要破解)
JDK自带了一个工具jvisualvm,这也是一个可视化工具,如果没有JProfiler可以使用这个。
jhat -J-mx768m -port 7000 12044.bin
通过http://localhost:7000/
就可以查看刚才dump下来JVM内存的状况。
jstack
输出当前进程中所有的线程信息,检查是否有死锁非常有效!
jstack -F 12044 >12044.stack
jconsole
启动JMX连接的客户端。
有UI可以连接本地或者远程的开启JMX的应用。
jcmd
多功能工具集,有一统java工具集的趋势。
jcmd -l
列出所有的JVM
输出结果
11600 sun.tools.jcmd.JCmd -l 6148 com.sun.tools.hat.Main -port 7000
12044.bin
jcmd 6148 hlep
输出结果
6148:
The following commands are available:
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.native_memory
VM.check_commercial_features
VM.unlock_commercial_features
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.run_finalization
GC.run
VM.uptime
VM.flags
VM.system_properties
VM.command_line
VM.version
help
For more information about a specific command use 'help <command>'.
查看虚拟机启动时间
VM.uptime
打印线程栈信息
Thread.print
查看系统中类统计信息
GC.class_histogram
导出堆信息
GC.heap_dump
获取系统Properties内容
VM.system_properties
获取启动参数
VM.flags
获取所有性能相关数据
PerfCounter.print
看到了么,这货有点太强大了,必须要使用。
jinfo
jinfo可以输出并修改运行时的java 进程的opts。
查看可以,但是修改总是提示该选项无法修改。
jstat
Jstat用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计,使用jstat我们可以对指定的JVM做如下监控:
- 类的加载及卸载情况
- 查看新生代、老生代及持久代的容量及使用情况
- 查看新生代、老生代及持久代的垃圾收集情况,包括垃圾回收的次数及垃圾回收所占用的时间
- 查看新生代中Eden区及Survior区中容量及分配情况等
jstatd启动的一个本地的服务,让远端的jstat可以连接过来,查看本地jvm的状况。
查看gc状况
jstat -gcutil pid N M
每隔N毫秒打印一条gc信息,总共打印M条。
native2ascii.exe
本地编码到ASCII编码的转换器(Native-to-ASCII Converter),用于”任意受支持的字符编码”和与之对应的”ASCII编码和(或)Unicode转义”之间的相互转换。