<实战Java虚拟机>学习笔记之性能监控工具
Contents
top
vmstat
iostat
pidstat
查看某进程及某线程占用CPU的例子
jps
: 列出java进程,找到pid.pidstat -p pid -u 1 3 -u -t
: 查看pid的进程所有线程的cpu使用情况.jstack -l pid > /tmp/thread.txt
: 导出指定Java应用的所有线程.
然后查看 nid=xxx
(即第二步里线程号的线程),即可定位到某段代码.
查看某进程及某线程占用IO的例子
jps
: 列出java进程,找到pid.pidstat -p pid -u 1 3 -d -t
: 查看pid的进程所有线程的IO使用情况.jstack -l pid > /tmp/thread.txt
: 导出指定Java应用的所有线程.
然后查看 nid=xxx
(即第二步里线程号的线程),即可定位到某段代码.
内存监控
pidstat -r -p pid 1 5
:查看某pid进程的内存.
jps 查看Java进程
jps -mlv
jstat 查看堆运行时信息
格式:
jstat -<option> [-t] [-h<lines>] <vmid JVM进程ID> [<interval 每次统计间隔时间> [<count 统计次数>] ]
option 列表
- class (类加载器)
- compiler (JIT)
- gc (GC堆状态)
- gccapacity (各区大小)
- gccause (最近一次GC统计和原因)
- gcnew (新区统计)
- gcnewcapacity (新区大小)
- gcold (老区统计)
- gcoldcapacity (老区大小)
- gcpermcapacity (永久区大小)
- gcutil (GC统计汇总)
- printcompilation (HotSpot编译统计)
jinfo 查看虚拟机参数
查看或者修改正在运行的虚拟机参数.
格式: jinfo
option 列表
-flag <name>
: 查看名为name
的虚拟机参数
例如:
jinfo -flag MaxThenuringThreshold 111
-flag +|-name
:设置指定虚拟机参数的布尔值-flag <name>=<value>
:设置指定虚拟机参数的值
jmap 导出堆到文件
统计对象信息
jmap -histo pid > /tmp/heap.txt
导出当前堆快照
jmap -dump:format=b,file=/tmp/heap.hprof pid
查看 ClassLoader 信息
jmap -permstat pid
查看 finalizer 队列中的对象
jmap -finalizerinfo pid
查看内存各区的大小信息
jmap -heap pid
jhat 自带的堆分析工具
jhat /tmp/heap.hprof
然后打开浏览器访问 localhost:7000
jstack 查看线程堆栈
jstack [-l] <pid> > /tmp.stack.txt
jcmd 多功能命令行[JDK 7自带]
#相当于 jps
jcmd -l
#查看启动时间
jcm pid VM.uptime
...
更多请使用 jcmd <pid> help 看所支持的命令.
hprof 性能统计工具
查看帮助:
java -agentlib:hprof=help
查看函数执行时间
执行Java程序时,添加上以下参数 -agentlib:hprof=cpu=times,interval=10
图形化监控工具 jConsole
远程配置:
-Djava.rmi.server.hostname=127.0.0.1
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8888
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
多合一工具 Visual VM
远程配置:
-Djava.rmi.server.hostname=127.0.0.1
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8888
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
Mission Control
该工具在 JDK Update 40 之后. 在bin目录下的
jmc.exe
.