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.