主要介绍JVM的分析工具:

jps

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

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

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

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

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次
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

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

可视化的jvm监控软件。

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

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

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

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

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

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

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

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

jvm分析工具-jmx

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远程

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

Java虚拟机------JVM分析工具的更多相关文章

  1. java自带的jvm分析工具

    http://domark.iteye.com/blog/1924302   这段时间觉得很有必要对java的内存分析工具进行熟悉,这样以后出现机器负载较高,或者反应很慢的时候,我就可以查找原因了.上 ...

  2. Java虚拟机(JVM)知多少

    本文大量参考:https://www.cnblogs.com/lfs2640666960/p/9297176.html 概述 JVM是JRE的一部分.它是一个虚构出来的计算机,是通过在实际的计算机上仿 ...

  3. 深入理解java虚拟机JVM(下)

    深入理解java虚拟机JVM(下) 链接:https://pan.baidu.com/s/1c6pZjLeMQqc9t-OXvUM66w 提取码:uwak 复制这段内容后打开百度网盘手机App,操作更 ...

  4. Java虚拟机JVM相关知识整理

    Java虚拟机JVM的作用: Java源文件(.java)通过编译器编译成.class文件,.class文件通过JVM中的解释器解释成特定机器上的机器代码,从而实现Java语言的跨平台. JVM的体系 ...

  5. Java虚拟机--------JVM常见参数

    JVM 调优常见参数 Java1.7的jvm参数查看一下官方网站. http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java. ...

  6. 深入理解JAVA虚拟机JVM

    深入理解JAVA虚拟机JVM Java 虚拟机(Java virtual machine,JVM)是运行 Java 程序必不可少的机制.java之所以能实现一次编写到处执行,也就是因为jVM.原理:编 ...

  7. java内存溢出分析工具

    http://www.cnblogs.com/preftest/archive/2011/12/08/2281322.html java内存溢出分析工具:jmap使用实战 在一次解决系统tomcat老 ...

  8. 深入理解java虚拟机JVM(上)

    深入理解java虚拟机JVM(上) 链接:https://pan.baidu.com/s/1c6pZjLeMQqc9t-OXvUM66w 提取码:uwak 复制这段内容后打开百度网盘手机App,操作更 ...

  9. java虚拟机jvm启动后java代码层面发生了什么?

    java虚拟机jvm启动后java代码层面发生了什么? 0000 我想验证的事情 java代码在被编译后可以被jdk提供的java命令进行加载和运行, 在我们的程序被运行起来的时候,都发生了什么事情, ...

随机推荐

  1. easyUI的datagrid每行数据添加操作按钮的方法

    今天做项目的时候,想在easyui的datagrid每一列数据后边都加上一个操作按钮,一开始想在后台拼接字符串用JSON传回,但是我测试之后发现这个方法不管用,在网上搜索了一下,整理如下: 其实要加一 ...

  2. cos migration工具webhook推送

    上一篇讲了腾讯云同步工具的使用,这篇主要是补充如何将同步结果主动消息通知. 因为cos migration 工具是java语言,并在github开源的,所以可以直接修改源码,添加webhook推送代码 ...

  3. direct3d

    DirectX for .Net procedure 1, install DXSDK  https://www.microsoft.com/en-us/download/details.aspx?i ...

  4. JDBC 编程步骤

    java访问数据库的步骤如下: 加载数据库驱动 通常使用Class.forName(driverClass)来加载驱动 // 加载MySQL驱动 Class.forName("com.mys ...

  5. java BufferedReader 与 BufferedWriter

    BufferedReader 与 BufferedWriter 字符缓冲输入/输出流,是处理流.意味着使用这两个流需要包装节点流. 如节点流FileReader fr = new FileReader ...

  6. centos7 如何在用户级对资源进行限制

    我们已经知道,centos7上建议使用sytemd进行资源限制. 本文主要介绍如何使用systemd进行用户级资源限制. 以orange用户为例. 方案一 临时有效 配置如下: # systemctl ...

  7. 基于redis 3.x搭建集群环境

    由于我团队开发的在线坐席系统,即将面对线上每周3000W的下行投放客户,产品的咨询量可能会很大,基于前期,200W的投放时,前10分钟,大概800问题量,平均一个客户大概8个问题,也就是说每分钟10个 ...

  8. sourceInsight与IAR的同步

    编写与编译二者同步:引用http://bbs.ednchina.com/BLOG_ARTICLE_3013475.HTM 1 在IAR中新建一个工程TEST.菜单栏 File->New-> ...

  9. Excel技巧--分类求和与空白批量填充

    分类求和: 当我们要对以上多个分类空白求和时,可以巧用Alt+=键: 1.选择对应要求和的列: 2.点击“查找与选择”下拉列,选择“定位条件”,对话框选择“空值”,点确定.将列中的空白单元格选好: 3 ...

  10. DLL何时需共享内存管理器

    Delphi创建DLL时,IDE自动生成的文档中写得很清楚,当在DLL中以动态数组或String做为参数或返回值时(即RTL自动维护的数据类型),请在每个工程文件的第一个单元加上ShareMem.这样 ...