java jvm 记录(一)

在第一篇中,我们来介绍查看jvm运行状态的一些工具。

jps

jps用来查看当前系统中运行的java程序

jps, 使用默认参数的话,直接显示出java程序的pid(即vmid)和运行的程序名称。

java jvm 记录(一)_第1张图片

jps, 使用-v参数,显示传入到jvm的参数.

java jvm 记录(一)_第2张图片

jcmd
jcmd是jdk7中提供的新工具, 可以获得比jps更多的信息.

jcmd, 使用默认参数, 显示pid和类名称(或者jar名称)
java jvm 记录(一)_第3张图片

jcmd中最重要的是,使用jcmd pid help,可以查看jvm中允许jcmd获取哪些信息. 如
java jvm 记录(一)_第4张图片


下面例子中,也可以直接使用类名称(或者jar名称)来代替pid来执行. 即下面三行的执行效果是一样的.

jcmd example.jar help
jcmd path/example.jar help
jcmd pid help


例如:1. 显示VM版本
jcmd pid VM.version
java jvm 记录(一)_第5张图片

例如:2. 显示系统信息
jcmd pid VM.system_properties
java jvm 记录(一)_第6张图片

例如:3. 显示GC相关参数
jcmd pid VM.flags
java jvm 记录(一)_第7张图片

例如:4. 显示vm工作时间
jcmd pid VM.uptime
java jvm 记录(一)_第8张图片

例如:5. 显示类柱形图
jcmd pid GC.class_histogram > histo.txt
这里和jmap -histo pid的效果是一样的.
java jvm 记录(一)_第9张图片

例如: 6. 显示全部vm性能相关的参数
jcmd pid PerfCounter.print
java jvm 记录(一)_第10张图片

例如: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

你可能感兴趣的:(java,jvm)