JVM性能調(diào)優(yōu)監(jiān)控工具jps、jstack、jmap、jhat、jstat、hprof使用詳解
jps(Java Virtual Machine Process Status Tool)
jsp詳細說明jstack
jstack詳細說明jmap(Memory Map)和jhat(Java Heap Analysis Tool)
jmap詳細說明jstat(JVM統(tǒng)計監(jiān)測工具)
jstat詳細說明hprof(Heap/CPU Profiling Tool)
hprof能夠展現(xiàn)CPU使用率,統(tǒng)計堆內(nèi)存使用情況。
來幾個官方指南上的實例。
CPU Usage Sampling Profiling(cpu=samples)的例子:
java -agentlib:hprof=cpu=sample,interval=20,depth=3 Hello
上面每隔20毫秒采樣CPU消耗信息,堆棧深度為3,生成的profile文件名稱是java.hprof.txt,在當前目錄。
CPU Usage Times Profiling(cpu=times)的例子,它相對于CPU Usage Sampling Profile能夠獲得更加細粒度的CPU消耗信息,能夠細到每個方法調(diào)用的開始和結(jié)束,它的實現(xiàn)使用了字節(jié)碼注入技術(BCI):
javac -J-agentlib:hprof=cpu=times Hello.java
Heap Allocation Profiling(heap=sites)的例子:
javac -J-agentlib:hprof=heap=sites Hello.java
Heap Dump(heap=dump)的例子,它比上面的Heap Allocation Profiling能生成更詳細的Heap Dump信息:
javac -J-agentlib:hprof=heap=dump Hello.java
雖然在JVM啟動參數(shù)中加入-Xrunprof:heap=sites參數(shù)可以生成CPU/Heap Profile文件,但對JVM性能影響非常大,不建議在線上服務器環(huán)境使用。
參考
- jconsole: https://docs.oracle.com/javase/1.5.0/docs/guide/management/jconsole.html
- Troubleshooting Guide for Java SE 6 with HotSpot VM : https://www.oracle.com/technetwork/java/javase/tsg-vm-149989.pdf
- Java VisualVM : https://docs.oracle.com/javase/7/docs/technotes/guides/visualvm/
- Monitoring and Managing Java SE 6 Platform Applications: https://www.oracle.com/technetwork/articles/javase/monitoring-141801.html