前面我们学习了很多JVM相关的理论知识,那么本节将重点讲述的是工具的使用,正所谓:工欲善其事,必先利其器。因此,本节介绍常用的性能监控工具,用于性能监控和问题排查。

一、系统性能监控

系统性能工具用于确定系统运行的整体状态,基本定位问题所在。

Linux

– uptime

• 系统时间

• 运行时间

n 例子中为7分钟

• 连接数

n 每一个终端算一个连接

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

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

– Top

• 第一行同uptime

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

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

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

– vmstat

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

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

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

– pidstat

• 细致观察进程

• 需要安装

n sudo apt-get install sysstat

• 监控CPU

• 监控IO

• 监控内存

Windows

– 任务管理器

– Perfmon

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

– pslist

n 命令行工具

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参数的值
 

jmap
–生成Java应用程序的堆快照和对象的统计信息
–jmap -histo 2972 >c:\s.txt

Dump堆
jmap -dump:format=b,file=c:\heap.hprof 2972

jstack
–打印线程dump
–-l 打印锁信息
–-m 打印java和native的帧信息
–-F 强制dump,当jstack没有响应时使用

jstack 120 >>C:\a.txt
JConsole
–图形化监控工具
–可以查看Java应用程序的运行概况,监控堆信息、永久区使用情况、类加载情况等
 

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

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

三、实战分析

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

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

死锁

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

输出最后的总结
 

参考文献:

葛一鸣《深入JVM内核》视频学习

JVM学习十二:JVM之性能监控工具的更多相关文章

  1. JVM学习十:JVM之垃圾收集器及GC参数

    接近两个月左右没有写博客,主要是因为小孩过来后,回家比较忙,现在小孩端午送回家了,开始继续之前的JVM学习之路,前面学习了GC的算法和种类,那么本章则是基于算法来产生实际的用途,即垃圾收集器. 一.堆 ...

  2. JVM学习十二 - (复习)JVM内存结构

    JVM 内存结构 Java 虚拟机的内存空间分为 5 个部分: 程序计数器 Java 虚拟机栈 本地方法栈 堆 方法区 JDK 1.8 同 JDK 1.7 比,最大的差别就是:元数据区取代了永久代.元 ...

  3. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  4. java之jvm学习笔记十三(jvm基本结构)

    java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成 ...

  5. JVM学习一:JVM之类加载器概况

    18年转眼就3月份都快结束了,也就是说一个季度就结束了:而我也因为年前笔记本坏了,今天刚修好了,那么也应该继续学习和博客之旅了.今年的博客之旅,从JVM开始学起,下面我们就言归正传,进入正题. 一.J ...

  6. (转)SpringMVC学习(十二)——SpringMVC中的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...

  7. JVM(十二),垃圾回收面试题

    十二.垃圾回收面试题 1.Object的finalize()方法 2.Java中的强软弱虚四种引用 (1)强引用 (2)软引用(间接引用) (3)弱引用 (4)虚引用 (5)四种引用区别

  8. JVM学习十三:JVM之堆分析

    本章进入JVM学习的最后一节,此节主要分析的是堆,因为堆是JAVA程序中最常用使用到的地方,因此对这个地方有必要进行下细致的分析特别是OOM,言归正传,进入正文. 一.内存溢出(OOM)的原因 在JV ...

  9. JVM学习笔记:JVM的体系结构与JVM的生命周期

    1 JVM在java平台中的位置 1.1 Java平台组成 Java平台主要由Java虚拟机和Java API这两部分组成.参考Oracle官网. 1.2 java平台结构图 JDK1.2开始,迫于J ...

随机推荐

  1. 严重: Failed to destroy end point associated with ProtocolHandler ["http-nio-8080"] java.lang.NullPointer

    刚接触servlet类,按照课本的方法使用eclipse新建了一个servlet类. 新建完成后,在web.xml里面进行注册 这时候就会报错了. 五月 07, 2016 11:23:28 上午 or ...

  2. vs快捷键代码格式化或代码对齐名字

    开发人员,换个电脑后环境要重装,vs的环境也需要重新设置. 快捷键需要重新设置,插件也需要重装,在这里备注下,换个环境就可以直接用了. 由于vs不同版本,代码对齐或者代码格式化的快捷键都不一样,所以导 ...

  3. ipv6问题

    1)百度搜索:针对苹果最新审核要求为应用兼容IPv6 2) ipV6测试网址:http://test-ipv6.com/ http://ipv6.jmu.edu.cn/ http://ipv6test ...

  4. [codecademy]css

    Great work! You've learned the basics of CSS structure and syntax. We'll continue to build on these ...

  5. 转 使用Docker部署 spring-boot maven应用

    转自:https://blog.csdn.net/u011699931/article/details/70226504/ 使用Docker部署 spring-boot maven应用 部署过程分为以 ...

  6. 转 docker的下载与安装

    百度网盘下载地址:https://oomake.com/download/docker-windows 道客地址: https://link.jianshu.com/?t=https://get.da ...

  7. Excel poi API基础教程!

    原文转子: http://blog.csdn.net/yellowd1/article/details/44628701 登录|注册     yellowd1的专栏       目录视图 摘要视图 订 ...

  8. 一次性无重复配置VS项目插件属性的方法

    在VS中需要使用opencv开源库或mysql等数据库时,为了能使用开源库或数据库的语言,需要添加库文件和包含目录等等.然而直接在[解决方案管理器]-->属性中配置的话,写下一个项目(解决方案) ...

  9. Django之logging日志

    简介 Django使用python自带的logging 作为日志打印工具.简单介绍下logging. logging 是线程安全的,其主要由4部分组成: Logger 用户使用的直接接口,将日志传递给 ...

  10. utuntu下安装pip&pip3

    在utuntu下建议不要使用apt-get install 安装pip,会出现很多问题. 建议使用如下方式安装: wget https://bootstrap.pypa.io/get-pip.py - ...