JVM系列之五:性能监控工具

工欲善其事,必先利其器。

这期我们来介绍常用的性能监控工具,用于性能监控和问题排查。在最后我们再分析一下堆,讲解一下内存溢出的原因。

 

系统性能监控

Linux

– uptime

 

• 系统时间

• 运行时间

例子中为7分钟

• 连接数

n 每一个终端算一个连接

• 1,5,15分钟内的系统平均负载

n 运行队列中的平均进程数

 

– Top

 

• 第一行同uptime

• 第三行到第五行是CPU和内存的使用情况

• 图中下面的列表是每个进程使用CPU的情况

• 可以知道哪个程序占CPU最多

 

– vmstat

• 可以统计系统的CPU,内存,swapio等情况

 

• 例子中的参数1为采样频率,4为采样次数

• 本例子说明CPU占用率很高,上下文切换频繁,说明系统有线程正在频繁切换

 

– pidstat

• 细致观察进程

• 需要安装

n sudo apt-get install sysstat

• 监控CPU

• 监控IO

• 监控内存

 

 

Windows

– 任务管理器

 

– Perfmon

n Windows自带多功能性能监控工具

 

 



– pslist

n 命令行工具

n 可用于自动化数据收集

显示java程序的运行情况

 

 

Java自带的工具

jps

– 列出java进程,类似于ps命令

– 参数-q可以指定jps只输出进程ID ,不输出类的短名称

– 参数-m可以用于输出传递给Java进程(主函数)的参数

– 参数-l可以用于输出主函数的完整路径

– 参数-v可以显示传递给JVM的参数

 

jinfo

– 可以用来查看正在运行的Java应用程序的扩展参数,甚至支持在运行时,修改部分参数

– -flag <name>:打印指定JVM的参数值

– -flag [+|-]<name>:设置指定JVM参数的布尔值

– -flag <name>=<value>:设置指定JVM参数的值

– 示例

运行时修改参数,控制是否输出GC日志

jinfo -flag PrintGCDetails  2972

-XX:-PrintGCDetails

jinfo -flag +PrintGCDetails  2972

jinfo -flag PrintGCDetails  2972

-XX:+PrintGCDetails

 

jmap

– 生成Java应用程序的堆快照和对象的统计信息

– jmap -histo >c:\s.txt

 

Dump

– jmap -dump:format=b,file=c:\heap.hprof

 

 

jstack

– 打印线程dump

– -l 打印锁信息

– -m 打印javanative的帧信息

– -F 强制dump,当jstack没有响应时使用

 

JConsole

– 图形化监控工具

– 可以查看Java应用程序的运行概况,监控堆信息、永久区使用情况、类加载情况等

 

 

 

 

Visual VM

– Visual VM是一个功能强大的多合一故障诊断和性能监控的可视化工具

 


 


性能监控:找到占用CPU时间最长的方法

 

分析堆Dump

 

实战分析

– 案例问题

· 运行一程序ThreadBlockMain,期望输出Hello,World ,结果在程序运行后,程序卡死,没有预期输出。

 

 

· Java程序HoldCPUMain运行后,发现占用CPU很高,希望能找到原因。

 

 

 

 

 

 

 

·如何从jstack的输出中找出死锁

 


猜你喜欢

转载自blog.csdn.net/qq_21508727/article/details/80622437