性能监控工具

系统性能监控

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问题。
在这里插入图片描述
**案例三:**死锁
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/taojin12/article/details/88034321