第四章 虚拟机性能监控与故障处理工具

1、JDK命令行工具

jps命令:

  • 作用:列出正在运行的虚拟机进程。
  • 格式:jps [option] [hostid]
  • 选项:-q 只输出LVMID(Local Virtual Machine Identifier)省略主类的名称。

      -m 输出虚拟机进程启动时传递给主类的main函数的参数

      -l 输出主类全名,如果进程执行的时jar包,输出Java路径

        -v 输出虚拟机进程启动的jvm参数,显示指定的参数列表,默认参数无法查看

jstat命令:

  • 作用:虚拟机统计堆信息监视工具,它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
  • 格式:jstat [option vmid [ interval [ s | ms] [ count ] ] ],option代表用户希望查询虚拟机的内容,主要分为类装载,垃圾收集,运行期编译情况,interval代表查询虚拟机间隔,count代表查询次数,若省略说明只查询一次。
  • 选项:-class 监视类装载,卸载数量,总空间以及类装载所耗费的时间。

        -gc监视Java堆状况,包括Eden区,两个survivor区,老年代,永久代等容量,已用空间,GC时间合计等信息。

jinfo命令:

  • 作用:Java配置信息工具,实时的查看和调整虚拟机各项参数,包括未被显示指定的参数的默认值,并且加入了运行期间修改参数的能力。
  • 格式:jinfo [option] pid
  • 选项:-flag 输出已命名vm参数的值

jmap命令:

  • 作用:Java内存映像工具,用于生成堆转储快照(一般称为heapdump或者dump文件),它还可以查询finalize执行队列,Java堆和永久代的详细信息,如空间使用率当前用的是那种收集器等。
  • 格式:jmap [option] vmid
  • 选项:-dump 生成Java堆转储快照。-dump: fomat=b, filename=<filename>

      -finalizerinfo显示出F-Queue中等待Finalizer线程执行finalizer方法的对象,只在Linux、Solaris平台有效。

      -heap显示堆中对象统计信息,只在Linux、Solaris平台有效。

      -histo显示堆中对象统计信息,包括类实例数据,合计容量。

      -F当虚拟机进程对dump选项没有响应时可使用这个选项强制生成dump快照,只在Linux、Solaris平台有效。

jhat命令:

  • 作用:虚拟机对转储快照分析工具,与jmap配合使用,来分析jmap生成的堆储快照,分析结果默认是以包为单位
  • 格式:jhat filename ,打开浏览器访问http://localhost:7000

jstack命令:

  • 作用:Java堆栈跟踪工具,用于生成虚拟机当前线程快照,线程快照就是当前虚拟机每一条线程正在执行的方法堆栈的集合,可以通过jstack来查看各个线程调用堆栈,就可以定位到线程出现停顿的常见原因。
  • 格式:jstack [option] vmid
  • 选项:-F当正常输出不被响应时,强制输出线程堆栈。

      -l除了堆栈外显示有关锁的附加信息。

      -m如果调用本地方法的话,可以显示C/C++的堆栈

HSDIS插件:

  • 作用:HotSpot虚拟机提供的反汇编插件,是让HotSpot的-XX:+PrintAssembly指令调用他来把动态生成的本地代码来分析问题。

2、JDK可视化工具

JConsole:

  • 作用:Java监视与管理控制台
  • 内存标签相当于jstat命令用于监视收收集器管理的虚拟机内存。
    package com.ecut.tool;
    
    import java.util.ArrayList;
    import java.util.List; public class MonitoringTest { static class OOMObject{
    public byte[] placeholder = new byte[64*1024];
    } public static void fillHeap(int num) throws InterruptedException {
    List<OOMObject> list = new ArrayList<>();
    for(int i =0; i < num ; i++){
    Thread.sleep(50);
    list.add(new OOMObject());
    }
    System.gc();
    } public static void main(String[] args) throws InterruptedException {
    fillHeap(1000);
    }
    }

    运行结果如下:

  • 线程标签相当于jstack命令遇到线程停顿时可以使用这个页签进行分析。
    package com.ecut.tool;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader; public class MonitoringThreadTest { /**
    * 死循环
    */
    public static void createBusyThread(){
    Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
    while (true);
    }
    },"testBusyThread");
    thread.start();
    } /**
    * 等待锁
    * @param lock
    */
    public static void createLockThread(final Object lock){
    Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
    synchronized (lock){
    try {
    lock.wait();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }
    },"testLockThread");
    thread.start();
    } public static void main(String[] args) throws IOException {
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader((System.in)));
    bufferedReader.readLine();
    createBusyThread();
    bufferedReader.readLine();
    createLockThread(new Object());
    } }

    运行结果如下:

  • 停顿的主要原因有等待外部的资源(数据库连接网络资源),死循环锁等待。

VisualVM插件:

  • 显示虚拟机进程及进程配置环境信息。
  • 监视应用程序的CPU、GC、堆、方法区以及线程信息。
  • dump以及分析堆转储快照。
  • 方法级的程序运行性能分析,找出被调用最多的,运行时间最长的方法。

源码地址:

https://github.com/SaberZheng/jvm-test

转载请于明显处标明出处:

https://www.cnblogs.com/AmyZheng/p/10525147.html

《深入理解Java虚拟机》读书笔记三的更多相关文章

  1. R语言实战读书笔记(三)图形初阶

    这篇简直是白写了,写到后面发现ggplot明显更好用 3.1 使用图形 attach(mtcars)plot(wt, mpg) #x轴wt,y轴pgabline(lm(mpg ~ wt)) #画线拟合 ...

  2. R实战读书笔记四

    第三章 图形入门 本章概要 1 创建和保存图形 2 定义符号.线.颜色和坐标轴 3 文本标注 4 掌控图形维数 5 多幅图合在一起 本章所介绍内容概括例如以下. 一图胜千字,人们从视觉层更易获取和理解 ...

  3. iPhone与iPad开发实战读书笔记

    iPhone开发一些读书笔记 手机应用分类1.教育工具2.生活工具3.社交应用4.定位工具5.游戏6.报纸和杂志的阅读器7.移动办公应用8.财经工具9.手机购物应用10.风景区相关应用11.旅游相关的 ...

  4. <<Java RESTful Web Service实战>> 读书笔记

    <<Java RESTful Web Service实战>> 读书笔记 第一章   JAX-RS2.0入门 REST (Representational State ransf ...

  5. 机器学习实战 - 读书笔记(13) - 利用PCA来简化数据

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第13章 - 利用PCA来简化数据. 这里介绍,机器学习中的降维技术,可简化样品数据. ...

  6. 机器学习实战 - 读书笔记(12) - 使用FP-growth算法来高效发现频繁项集

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第12章 - 使用FP-growth算法来高效发现频繁项集. 基本概念 FP-growt ...

  7. 机器学习实战 - 读书笔记(11) - 使用Apriori算法进行关联分析

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习心得,这次是第11章 - 使用Apriori算法进行关联分析. 基本概念 关联分析(associat ...

  8. 机器学习实战 - 读书笔记(07) - 利用AdaBoost元算法提高分类性能

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第7章 - 利用AdaBoost元算法提高分类性能. 核心思想 在使用某个特定的算法是, ...

  9. 【转载】MDX Step by Step 读书笔记(三) - Understanding Tuples (理解元组)

    1. 在 Analysis Service 分析服务中,Cube (多维数据集) 是以一个多维数据空间来呈现的.在Cube 中,每一个纬度的属性层次结构都形成了一个轴.沿着这个轴,在属性层次结构上的每 ...

  10. Spring实战读书笔记

    Spring实战读书笔记 Spring-core Spring之旅 - DI 和 AOP 概念 spring 的Bean容器 spring 的 核心模块 Spring的核心策略 POJO 最小侵入式编 ...

随机推荐

  1. cf938D

    题意简述:n个点m条边的无向图,有点权,有边权, 对于每一个点计算,d(i,j)表示点i到点j的最短路 题解:边权扩大二倍,建立源点,然后源点向每一个点x连接一条权值为a[x]的边,然后跑最短路即可 ...

  2. 分布式配置中心:Spring Cloud Config

    最近在学习Spring Cloud的知识,现将分布式配置中心:Spring Cloud Config的相关知识笔记整理如下.[采用 oneNote格式排版]

  3. FPGA分频与倍频的简单总结(涉及自己设计,调用时钟IP核,调用MMCM原语模块)

    原理介绍 1.分频 FPGA设计中时钟分频是重要的基础知识,对于分频通常是利用计数器来实现想要的时钟频率,由此可知分频后的频率周期更大.一般而言实现偶数系数的分频在程序设计上较为容易,而奇数分频则相对 ...

  4. 解决 Windows 编译 Fast R-CNN 的 bbox 和 nms 出现的错误 error: Unable to find vcvarsall.bat

    在 Windows 下安装一个底层的 Python 包时(Fast R-CNN 的 bbox 和 nms),遇到 error: Unable to find vcvarsall.bat 错误,看到这个 ...

  5. sc 与 net 命令

    查看命令的帮助: help sc 或者 help net net: net start mysql  打开服务 net stop mysql 关闭服务 net pause mysql 暂停服务 sc ...

  6. 使用centos6.5整理出来的常用命令

    1.Vi 基本操作1) 进入vi 在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面: $ vi myfile 进入vi之后,是处于「命令行模式(command mode)」,您要切换到「插 ...

  7. Easyui-Treegrid使用注意事项-sunziren

    版权声明:本文为sunziren原创文章,博客园首发,转载务必注明出处以及作者名称. 最近,工作中有一个网页需要用到前端框架easyui的treegrid组件,因此我对这个treegird研究了一段时 ...

  8. 视频格式转换mp4

    第一步:https://ffmpeg.zeranoe.com/builds/下载ffmpeg 或者:百度云下载: 链接:https://pan.baidu.com/s/1x_QogbV8xFjkYTe ...

  9. ControlTemplate in WPF

    Shared in all file window Button CheckBox Radiobutton Textbox ComboBox ListBox ItemsControl TreeView ...

  10. codeforces 99999/553 Sultan's Pearls Solution 珍珠 题解

    文章目录 珍珠 题意 分析 增加限定条件 去掉限定条件 Code 珍珠 题意 一共n课珍珠,m颗悬挂,其余在桌子上.如图所示. 仆人每天从某一端"借"一颗珍珠珠.主人每天都会检查悬 ...