系统性能监控
Linux系统命令
-
可以确定系统运行的整体状态,基本定位问题所在。
1、Linux中的uptime
命令,输出下面信息
04:03:58 up 10 days, 13:19, 1 user, load average: 0.54, 0.40, 0.20
-
当前时间 04:03:58
-
系统已运行的时间 10 days,
-
13:19 当前在线用户 1 user (每一个终端算一个连接)
-
平均负载:0.54, 0.40,0.20,最近1分钟、5分钟、15分钟系统的负载(运行队列中平均进程数)
2、Linux中top
命令,用来监控Linux系统的系统状况,比如CPU、内存的使用。
下面图表可以知道那个程序占CPU最多。
3、Linux命令vmstat
,可以统计系的CPU、内存,swap,io等情况。
4、Linux中命令pidstat
,可以非常细致的观察到每一个进程。需要进行安装:sudo apt-get install sysstat
,可以监控CPU、监控IO、监控内存。
windows系统命令
1、任务管理器
2、命令:perfmon
打开windos自带的性能监控工具。
2、Process Explorer进行浏览器工具(需要安装),不是windows自带的。
3、pslist
,命令行工具(需要安装),可用于自动化数据收集,显示java程序的运行情况。
Java自带的工具
- 查看Java程序运行的细节,进一步定位问题。
1、命令:jps
,列出java进程,类似于ps命令。 - 参数-q可以指定jps只输出进程ID,不输出类的短名称
- 参数-m 可以用户输出传递给java进程(主函数)的参数
- 参数-l 可以用于输出主函数的完整路径
- 参数-v 可以显示传递给JVM的参数。
示例:
2、命令:jinfo
,可以用来查看正在运行的java应用程序的扩展参数,设置支持在运行是,修改部分参数。 - -flag : 打印指定JVM的参数值
- -flag [+|-] :设置指定JVM参数布尔值
- -flag =:设置指定JVM参数的值
示例:
1)显示了新生代对象晋升到老年代对象的最大年龄
2)显示是否打印GC详情信息,-号为不打印GC信息。
3)运行时修改参数,控制是否输出GC日志,修改为打印GC。
3、命令:jmap
,生成java应用程序的堆快照和对象的统计信息。
jmap -histo 2972 >c:\s.txt
,在目录下,生成文档信息。
-- dump堆:
jmap -dump:format=b,file=c:\heap.hprof 2972
4、命令:jstack
,打印线程dump信息。
- -l ,打印锁信息。
- -m 打印java和native的帧信息。
- -F 强制dump,当jstack没有响应时使用
5、JConsole:java自带的图形化监控工具,安装的JDK的bin目录中
可以单独查看堆内存和非堆内存使用情况,右上角还有个执行GC按钮,进行GC操作。
6、Visual VM是一个功能强大的多合一故障诊断和性能监控的可视化工具,位于JDK的bin目录下。
在抽样器中可以查找最占CPU的方法。
分析堆DUmp
实战分析
**案例一:**运行一程序ThreadBlockMain,期望输出Hello,World ,结果在程序运行后,程序卡死,没有预期输出。
打印出栈信息,可以看到问题出在java程序中的17行。
**案例二:**Java程序HoldCPUMain运行后,发现占用CPU很高,希望能找到原因。
1)通过jps,查看进行的id。
2)top命令,查看进行占用CPU情况。
3)pitstat命令查看进程下的线程情况,将线程id,转为十六进制,在栈信息中线程ID已十六进制表示。
4)打印栈信息,找到java问题。
**案例三:**死锁