在第一篇中,我们来介绍查看jvm运行状态的一些工具。
jps
jps用来查看当前系统中运行的java程序
jps, 使用默认参数的话,直接显示出java程序的pid(即vmid)和运行的程序名称。
jps, 使用-v参数,显示传入到jvm的参数.
jcmd
jcmd是jdk7中提供的新工具, 可以获得比jps更多的信息.
jcmd, 使用默认参数, 显示pid和类名称(或者jar名称)
jcmd中最重要的是,使用jcmd pid help,可以查看jvm中允许jcmd获取哪些信息. 如
下面
例子中,也可以直接使用类名称(或者jar名称)来代替pid来执行. 即下面三行的执行效果是一样的.
jcmd example.jar help
jcmd path/example.jar help
jcmd pid help
例如:1. 显示VM
版本
jcmd pid VM.version
例如:2. 显示系统信息
jcmd pid VM.
system_properties
例如:3. 显示GC相关参数
jcmd pid VM.flags
例如:4. 显示vm工作时间
jcmd pid VM.uptime
例如:5. 显示类柱形图
jcmd pid GC.
class_histogram > histo.txt
这里和jmap -histo pid的效果是一样的.
例如: 6. 显示全部vm性能相关的参数
jcmd pid PerfCounter.print
例如:7. 显示所有
线程的java栈信息
jcmd pid Thread.print
这里和jstack -l pid的效果是一样的。
这里和下面的例子就不再附图了. 可以自己尝试.
例如:8. dump出HPROF格式的
内存信息, 保存到/tmp/dump.bin文件中. 这里
文件名要使用绝对路径. 如果使用相对路径,会保存到pid进程运行时所在的目录中.
jcmd pid GC.heap_dump /tmp/dump.bin
例如:9. 执行一次finalization操作,相当于执行java.lang.System.runFinalization()
jcmd pid GC.run_finalization
例如:10. 执行一次Full gc操作, 相当于执行java.lang.System.gc()
jcmd pid GC.run
参考文献:
1. Java SE 7: Reviewing
JVM Performance Command Line Tools