主要介绍JVM的分析工具:

jps

1234567891011121314151617
jps:Java Virtual Machine Process Status Tool

http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jps.html

jps [ options ][ hostid ]

      -q 只显示pid,不显示class名称,jar文件名和传递给main 方法的参数

       -m -m 输出传递给main 方法的参数,在嵌入式jvm上可能是null

        -l  输出应用程序main class的完整package名 或者 应用程序的jar文件完整路径名

      -v 输出传递给JVM的参数

jps host

查看host的jps情况(前提:host提供jstatd服务)

JVM分析工具-jmap1

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
Memory Map 观察运行中的jvm物理内存的占用情况。

官方地址:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jmap.html

   jmap [ option ] pid

 pid   进程号(常用)

 参数如下:

        -heap:打印jvm heap的情况(垃圾收集器类型)

     -histo:打印jvm heap的直方图。其输出信息包括类名,对象数量,对象占用大小。

       -histo:live :同上,但是只打印存活对象的情况

      -permstat:打印permanent generation heap(方法区)情况

       -finalizerinfo:打印正等候回收的对象信息Memory Map 观察运行中的jvm物理内存的占用情况。

官方地址:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jmap.html

     jmap [ option ] pid

 pid   进程号(常用)

 参数如下:

    -heap:打印jvm heap的情况(垃圾收集器类型)

 -histo:打印jvm heap的直方图。其输出信息包括类名,对象数量,对象占用大小。

   -histo:live :同上,但是只打印存活对象的情况

   -permstat:打印permanent generation heap(方法区)情况

   -finalizerinfo:打印正等候回收的对象信息

用jmap把进程内存使用情况dump到文件中,再用jhat分析查看。jmap进行dump命令格式如下:

jmap -dump:format=b,file=dumpFileName pid

jmap -dump:format=b,file=4574.heap20151215  4574

Dumping heap to 4574.heap20151215

Heap dump file created

dump出来的文件可以用MAT、VisualVM等工具查看,这里用jhat查看:

jhat -port 9998 /tmp/dump.dat

注意如果Dump文件太大,可能需要加上-J-Xmx512m这种参数指定最大堆内存,即jhat -J-Xmx512m -port 9998 /tmp/dump.dat。然后就可以在浏览器中输入主机地址:9998查看了。

jinfo

1234567891011121314151617
Configuration Info

官方地址:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jinfo.html

jinfo [ option ] pid

pid   进程号

参数如下:

       no option  打印命令行参数和系统属性

     -flags  打印命令行参数

     -sysprops  打印系统属性

      -h  帮助

jstack1

123456789101112131415161718192021222324252627282930313233
jstack:Stack Trace

http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstack.html

jstack能得到运行java程序的java stack和native stack的信息。可以轻松得知当前线程的运行情况

jstack [ option ] pid

[ option ] 参数如下

     -l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.

     -m打印java和native c/c++框架的所有栈信息.

tid指Java Thread id。nid指native线程的id。prio是线程优先级。[0x00007fd4f8684000]是线程栈起始地址

dump 文件里,值得关注的线程状态有:

死锁,Deadlock(重点关注)

等待资源,Waiting on condition(重点关注)

等待获取监视器,Waiting on monitor entry(重点关注)

阻塞,Blocked(重点关注) 

执行中,Runnable  

暂停,Suspended

对象等待中,Object.wait() 或 TIMED_WAITING

 停止,Parked

jstat

12345678910111213141516171819
jstat: Java Virtual Machine Statistics Monitoring Tool

http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html

 Usage: jstat -help|-options

      jstat -<option> [-t][-h] <pid> [<interva[s|ms]> [<count>]]

参数解释:

Options — 选项,我们一般使用 -gcutil /-gc 查看gc情况

pid      — VM的进程号,即当前运行的java进程号

interval[s|ms]  ——  间隔时间,单位为秒或者毫秒,默认为ms。必须是正整型。

count     — 打印次数,如果缺省则打印无数次

例如:jstat -gc 4645 500 10  表示查看进程号为4645的gc 每500ms打印一次  共打印10次
123456789101112131415
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)S1C:年轻代中第二个survivor(幸存区)的容量 (字节)S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)EC:年轻代中Eden(伊甸园)的容量 (字节)EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)OC:Old代的容量 (字节)OU:Old代目前已使用空间 (字节)PC:Perm(持久代)的容量 (字节)PU:Perm(持久代)目前已使用空间 (字节)YGC:从应用程序启动到采样时年轻代中gc次数YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)FGC:从应用程序启动到采样时old代(全gc)gc次数FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)GCT:从应用程序启动到采样时gc用的总时间(s)

jstat -gccapacity pid

1234567891011121314151617181920
NGCMN:年轻代(young)中初始化(最小)的大小 (字节)NGCMX:年轻代(young)的最大容量 (字节)NGC:年轻代(young)中当前的容量 (字节)OGCMN:old代中初始化(最小)的大小 (字节) OGCMX:old代的最大容量 (字节)OGC:old代当前新生成的容量 (字节)PGCMN:perm代中初始化(最小)的大小 (字节) PGCMX:perm代的最大容量 (字节)   PGC:perm代当前新生成的容量 (字节)S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比E:年轻代中Eden(伊甸园)已使用的占当前容量百分比O:old代已使用的占当前容量百分比S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节)ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满)TT: 持有次数限制MTT : 最大持有次数限制

jvm分析工具-jconsole

1234567891011121314151617
可视化的jvm监控软件。

可以监控本地或者远程进程。

主要包括:概览、内存、线程、类、VM概要、MBean选项卡。

概览选项卡:呈现四幅图表:主要包括堆内存使用量、类、线程、CPU占有率。

内存选项卡:包含堆内、非堆、内存池的使用量图表和详细信息。相当于jstat命令。

线程选项卡:显示所有的线程的信息和图表。相当于jstack

类选项卡:加载的类的信息。

Vm概要:VM的概要信息包括堆大小,垃圾收集信息、vm参数等。

Mbean选项:managed beans ,被管理的beans

jvm分析工具-jmx

12345678910111213141516
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。开启jmx:无需验证的配置:-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=1234 -Dcom.sun.management.jmxremote.ssl=false将-Dcom.sun.management.jmxremote.authenticate=false 去掉就是需要验证信息即:登录名和密码:验证用户的配置文件在$java_home/jre/lib/management/jmxremote.password默认有一个$java_home/jre/lib/management/jmxremote.password.template修改下即可。jmxremote.password.template默认是只读权限。并更改为可写的权限 chmod a+w jmxremote.password修改后把jmxremote.password的读权限取消 a-r 。否则会提示:Error: Password file read access must be restricted: management/jmxremote.access配置下权限。连接时指定ip:端口和jmx连接即可。远程的线程dump可以dump查看,堆的dump是需要从远程拉到本地来查看。

jconsole和jvisualvm远程

1234
jconsole:在连接界面有显示本地连接或者远程连接,输入相应的主机名和jmx的端口号即可。jvisualvm:在远程的选项添加计算机,然后右键添加jmx连接或者jstatd连接。

Java虚拟机------JVM分析工具相关推荐

  1. java 自带thread分析工具_java自带的jvm分析工具

    这段时间觉得很有必要对java的内存分析工具进行熟悉,这样以后出现机器负载较高,或者反应很慢的时候,我就可以查找原因了.上网搜了搜,发现下面这些是比较常用的,然后我在机器上试试了,把结果也贴出来哈. ...

  2. java虚拟机常用命令工具

    java虚拟机常用命令工具 博客分类: 虚拟机 虚拟机jvmjava  一.概述            程序运行中经常会遇到各种问题,定位问题时通常需要综合各种信息,如系统日志.堆dump文件.线程d ...

  3. 深入理解java虚拟机 - jvm高级特性与最佳实践(第三版)_JVM虚拟机面试指南:年薪30W以上高薪岗位需求的JVM,你必须要懂!...

    JVM的重要性 很多人对于为什么要学JVM这个问题,他们的答案都是:因为面试.无论什么级别的Java从业者,JVM都是进阶时必须迈过的坎.不管是工作还是面试中,JVM都是必考题.如果不懂JVM的话,薪 ...

  4. 【读书笔记】实战JAVA虚拟机JVM故障诊断与性能优化 读书笔记

    文章目录 1.概述 1.1 **第一章:初探java虚拟机** 1.2 认识java虚拟机的基本结构 1.3 常用Java虚拟机参数 1.4 垃圾回收器 1.5 垃圾收集器以及内存分配 1.6 性能监 ...

  5. 实战java虚拟机 百度云_《实战JAVA虚拟机 JVM故障诊断与性能优化》pdf百度云下载...

    内容简介· · · · · · 随着越来越多的第三方语言(Groovy.Scala.JRuby等)在Java虚拟机上运行,Java也俨然成为了一个充满活力的生态圈.<实战Java虚拟机--JVM ...

  6. Java 虚拟机(JVM)原理介绍

    Java 虚拟机[JVM]原理介绍 1.概述 2.Java类的加载原理机制 2.1 .Java类的加载过程 2.2 .Class loader (类加载器) 2.2.1 类的生命周期 2.2.1.1 ...

  7. 深入理解Java虚拟机——JVM垃圾回收机制和垃圾收集器详解

    一:概述 说起垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联系起来.在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,顾名思义,垃圾回收就是释 ...

  8. Java虚拟机(JVM)与Java内存模型(JMM)学习笔记

    Java虚拟机[JVM]与Java内存模型[JMM]学习笔记 Java虚拟机(JVM) 三种JVM JVM 位置 JVM的主要组成部分及其作用 类加载器 双亲委派机制 沙箱安全机制 Java本地接口( ...

  9. java虚拟机现状_深入理解java虚拟机的故障处理工具

    前言 本文主要给大家介绍的是java虚拟机的故障处理工具,文中提到这些工具包括: 名称 主要作用 jps JVM process Status Tool, 显示指定系统内所有的HotSpot虚拟机进程 ...

最新文章

  1. Java项目:医院分诊挂号住院管理系统(java+SpringBoot+FreeMarker+Mysql)
  2. Netty--ChannelHandler和ChannelPipeline
  3. swift5主线程延迟操作的几种写法
  4. fov视场角计算_图像传感器集成计算功能,赋能机器视觉技术
  5. linux_负载分析之LoadAverage
  6. python编程案例教程-Python程序开发案例教程
  7. 空洞卷积(Dilated Convolution)简介
  8. 实证研究的步骤_本科生毕业论文设计可以用到的研究方法有哪些
  9. 1年时间,年薪增加10万,前端小兵的我是如何做到的?
  10. 戴尔-卡耐基:《人性的优点 How to stop worrying and start living》
  11. 前端页面模拟浏览器搜索功能Ctrl+F实现
  12. 实现LOL游戏中英雄技能的释放
  13. php简单后台,ThinkPHP简单网站后台
  14. 如何解决Oracle11g使用dmp命令无法导出空表问题
  15. L2+ 概念要火!英伟达和英特尔都释放了什么信号?| CES 2019 ...
  16. (一)1.考研数一高数 之 函数及其性质
  17. jquery-select2实现省市区三级联动(拓展SpringMVC后台方法)
  18. 算法-数据结构-演示网站(USF)
  19. 安装SQL2000时出现:安装程序配置服务器失败。参考服务器错误日志和 C:/WINDOWS/sqlstp.log 了解更多信息。
  20. c++ c语言编写抽学号小程序

热门文章

  1. android 推流地址可以多人用,Android直播实现(一)Android端推流、播放
  2. CJOJ 【DP合集】最长上升序列2 — LIS2
  3. C#实现的UDP收发请求工具类实例
  4. S7-300/400 系统 Profibus DP 通讯故障诊断实用方
  5. 编写让别人能够读懂的代码
  6. [上海]招募.net网站测试员(实习/见习)
  7. java byreference_Java中各种引用(Reference)解析
  8. 計算機二級-java09
  9. 基础知识—数据类型-常量及符号
  10. mysql 读取data文件_利用mysql的LOAD DATA INFILE的功能读取客户端文件