性能监控工具

文章目录

      • 系统性能监控
          • Linux系统命令
          • windows系统命令
      • Java自带的工具
      • 实战分析

系统性能监控

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最多。
性能监控工具_第1张图片
3、Linux命令vmstat,可以统计系的CPU、内存,swap,io等情况。
性能监控工具_第2张图片
4、Linux中命令pidstat,可以非常细致的观察到每一个进程。需要进行安装:sudo apt-get install sysstat,可以监控CPU、监控IO、监控内存。
性能监控工具_第3张图片
性能监控工具_第4张图片

windows系统命令

1、任务管理器
性能监控工具_第5张图片
2、命令:perfmon打开windos自带的性能监控工具。
性能监控工具_第6张图片
性能监控工具_第7张图片
2、Process Explorer进行浏览器工具(需要安装),不是windows自带的。
性能监控工具_第8张图片
性能监控工具_第9张图片
3、pslist,命令行工具(需要安装),可用于自动化数据收集,显示java程序的运行情况。
性能监控工具_第10张图片

Java自带的工具

  • 查看Java程序运行的细节,进一步定位问题。
    性能监控工具_第11张图片
    1、命令:jps,列出java进程,类似于ps命令。
  • 参数-q可以指定jps只输出进程ID,不输出类的短名称
  • 参数-m 可以用户输出传递给java进程(主函数)的参数
  • 参数-l 可以用于输出主函数的完整路径
  • 参数-v 可以显示传递给JVM的参数。
    示例:
    在这里插入图片描述
    在这里插入图片描述
    性能监控工具_第12张图片
    2、命令:jinfo,可以用来查看正在运行的java应用程序的扩展参数,设置支持在运行是,修改部分参数。
  • -flag : 打印指定JVM的参数值
  • -flag [+|-] :设置指定JVM参数布尔值
  • -flag =:设置指定JVM参数的值
    示例:
    1)显示了新生代对象晋升到老年代对象的最大年龄
    在这里插入图片描述
    2)显示是否打印GC详情信息,-号为不打印GC信息。
    在这里插入图片描述
    3)运行时修改参数,控制是否输出GC日志,修改为打印GC。
    性能监控工具_第13张图片

3、命令:jmap,生成java应用程序的堆快照和对象的统计信息。

  • jmap -histo 2972 >c:\s.txt,在目录下,生成文档信息。
    -性能监控工具_第14张图片
  • dump堆:jmap -dump:format=b,file=c:\heap.hprof 2972

性能监控工具_第15张图片

性能监控工具_第16张图片
4、命令:jstack,打印线程dump信息。

  • -l ,打印锁信息。
  • -m 打印java和native的帧信息。
  • -F 强制dump,当jstack没有响应时使用
    5、JConsole:java自带的图形化监控工具,安装的JDK的bin目录中
    性能监控工具_第17张图片
    性能监控工具_第18张图片
    可以单独查看堆内存和非堆内存使用情况,右上角还有个执行GC按钮,进行GC操作。
    性能监控工具_第19张图片
    6、Visual VM是一个功能强大的多合一故障诊断和性能监控的可视化工具,位于JDK的bin目录下。
    性能监控工具_第20张图片
    性能监控工具_第21张图片
    性能监控工具_第22张图片
    在抽样器中可以查找最占CPU的方法。性能监控工具_第23张图片
    分析堆DUmp
    性能监控工具_第24张图片

实战分析

**案例一:**运行一程序ThreadBlockMain,期望输出Hello,World ,结果在程序运行后,程序卡死,没有预期输出。
性能监控工具_第25张图片
打印出栈信息,可以看到问题出在java程序中的17行。
**案例二:**Java程序HoldCPUMain运行后,发现占用CPU很高,希望能找到原因。
1)通过jps,查看进行的id。
性能监控工具_第26张图片
2)top命令,查看进行占用CPU情况。
性能监控工具_第27张图片
3)pitstat命令查看进程下的线程情况,将线程id,转为十六进制,在栈信息中线程ID已十六进制表示。
性能监控工具_第28张图片
4)打印栈信息,找到java问题。
性能监控工具_第29张图片
**案例三:**死锁
性能监控工具_第30张图片
性能监控工具_第31张图片
性能监控工具_第32张图片

你可能感兴趣的:(java)