深入理解_JVM内存管理JDK监控工具与故障处理工具07

1、jps:

JVM process Status Tool,显示系统所有的HotSpot虚拟机进程以及进程的本地虚拟机的唯一ID(LVMID,Local Virtual Machine Identifier)。

对于本地虚拟机进程来说,LVMID与操作系统的进程ID(PID,Process Identifier)是一致的。如果启动了多个虚拟机进程,就需要显示主类的功能才能区分了。

jps命令格式:

jps [option] [hostid]

jps主要选项:

-v :输出虚拟机进程启动时JVM参数。

-q :只输出LVMID,省略主类的名称;

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

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

2、jstat:

用于监视虚拟机各种运行状态信息的命令行工具。

jstat命令格式:

jstat [option vimd] [interval [s|ms] [count]]

VIMD与LVMID的区别:

<1>如果是本地虚拟主机,VIMD与LVMID是一致的。

<2>如果是远程虚拟机进程,

VIMD的格式:[protocol:][//]lvmid[@hostname[:port]/servername]

interval:代表查询间隔;

count:次数。

如果省略上述2个参数,则只查询一次。

jstat主要选项:

jstat -class pid:监视class装载、卸载的数量,总空间及类装载所耗费的时间。

jstat -gc pid:监视java堆状况,包括1个Eden区,2个Survivor区,老生代、持久代等的容量、已用空间。显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。

jstat -gccapacity:监视内容与-gc基本一样,但输出主要关注java堆各区域使用到的最大和最小空间。如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是当前perm内存占用量。其他的可以根据这个类推, OC是old内存的占用量。

jstat -gcutil pid:监视内容与-gc基本一样,但主要输出已使用空间占总空间的百分比。

jstat -gccause pid:与gcutil一样,但是会额外输出导致上一次GC产生的原因。

jstat -gcnew pid:监控新生代GC的状况。

jstat -gcnewcapacity pid:监控内存与-gcnew基本相同,输出主要关注到使用的最大和最小空间。

jstat -gcold pid:监控老生代GC的状况。

jstat -gcoldcapacity pid:监控内存与-gcold基本相同,输出主要关注到使用的最大和最小空间。

jstat -gcpermcapacity pid: 输出永久代使用到的最大和最小空间。

jstat -compiler pid:显示VM实时编译的数量等信息。

jstat -printcompilation pid:输出已经被JIT编译的方法。

3、jinfo:

实时查看和调整虚拟机的各项参数。

jinfo命令格式:

jinfo [option] pid

jinfo主要选项:

jinfo -flag <name> pid : name是JVM参数的名字。

例如:

执行:C:\Users\yyang7>jinfo -flag CMSInitiatingOccupancyFraction 8072

结果:-XX:CMSInitiatingOccupancyFraction=-1

4、jmap:

功能:

<1> 用于生成堆转储快照(heapdump)

如果不适用该命令,还可以尝试试用:-XX:+HeapDumpOnOutMemoryError参数,可以让虚拟机在OOM时自动生成dump文件。(疲劳测试时候常开启该参数)。通过在VM参数后加-XX:+HeapDumpOnOutOfMemoryError -

XX:HeapDumpPath=/home/admin/logs/java.hprof ,在内存溢的时候会dump内存快照及指定内存快照的存储文件.也可以通过命令行dump命令执行时的内存快照.

<2> 查询finalize执行队列,java堆和永久代的详细信息。

jmap命令格式:

jmap [option] vmid

jmap主要选项:

-dump:生成java堆转储快照。格式为:-dump:[live,]format=b,file=<filename> PID,其中live子参数说明是否只dump出存活的对象。

-finalizeinfo:显示在F-Queue中等待Finalize线程执行finalize方法的对象,只在linux和Solaris平台下有效。

-heap:显示java堆的详细信息,如使用哪种回收器,参数配置,分代状况等,只在linux和Solaris平台有效。

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

-permstat:以ClassLoader为统计口径显示永久代内存状态,只在linux和Solaris平台有效。

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

5、jhat:

虚拟机堆转储快照分析工具,一般不用此工具。

6、jstack:

用于生成虚拟机当前时刻的线程快照,(Threaddump或javacode文件)。

线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合。

主要目的:

定位线程出现长时间停顿的原因,如线程死锁、死循环、请求外部资源导致的长时间等待等。

jstack命令格式:

jstack [option] vmid

jstack主要选项:

-F:当正常输出的请求不被响应时,强制输出线程堆栈。

-l:除堆栈外,显示关于锁的附加信息。

-m:如果调用到本地方法的话,可以显示C/C++信息。

时间: 2024-10-23 04:14:43

深入理解_JVM内存管理JDK监控工具与故障处理工具07的相关文章

深入理解_JVM内存管理JDK监控工具与故障处理工具08

Jconsole: Visial VM: 1.主要功能: (1)显示虚拟机进程及进程的配置和环境信息(jps,jinfo): (2)监视应用程序的CPU.GC.堆.方法区及线程信息(jstat,jstack): (3)dump及分析堆转储快照(jmap,jhat): (4)方法级的程序运行性能分析,找出被调用最多.运行时间最长的方法: (5)离线程序快照:收集程序的运行时配.线程dump.内存dump等信息建立一个快照,可以将快照发送开发者进行bug处理: (6)其他plus可能性. 2.生成和

深入理解_JVM内存管理调优案例分析与实战10

1.高性能硬件上的程序部署策略 目前常用2种方式: (1)通过64位JDK来使用大内存: 使用第一种方式关键: <1>控制应用程序的Full GC频率.譬如10多个小时甚至一天才出现一次Full GC. 关键:大多数对象的生存时间不应该太长,保证老年代空间的稳定. 在大多数网站形势的应用里,主要对象的生存周期都是请求级或页面级的,会话级和全局级的长生命对象相对较少,控制住Full GC. 需要考虑的问题: <1>内存回收导致的长时间停顿: <2>现阶段,64位JDK的性

深入理解_JVM内存管理对象引用03

1.对象引用: (a)对象状态的判断: <1> 引用计数算法:无法解决对象相互引用的问题. <2> 根搜索算法:主流的判断对象是否存活的算法. (1)基本思路:通过一系列的名为:"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相关联时,证明此对象是不可用的,所以它们将会被判断为是可收回的对象. (2)Java中,GC Roots的对象包括下面几种:

深入理解_JVM内存管理内存分配和回收策略06

解决两个问题: 1.对象分配内存: 2.回收分配给对象的内存. 本节详细讲解分配的问题: 名词解释: 新生代GC(Minor GC):指发生在新生代的垃圾回收动作,非常频繁,回收速度很快. 老生代GC(Major GC/Full GC):指发生在老生代的垃圾回收动作,出现了Major GC,经常会伴随至少一次的Minor GC(但非绝对),速度一般会比Minor GC慢10倍. 打印日志说明: <1> DefNew:串行GC方式(Serial GC). <2> ParNew:Par

深入理解_JVM内存管理垃圾收集算法04

1.垃圾收集算法(方法论): 定义:JVM通过GC来回收堆和方法区中的内存. GC的基本原理:首先会找程序中不再被使用的对象:然后回收这些对象所占用的内存. 算法分类: (1) 按照基本回收策略分: <1>引用计数(Reference Counting): 比较古老的回收算法.原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数.垃圾回收时,只用收集计数为0的对象.此算法最致命的是无法处理循环引用的问题. <2> 标记-清除(Mark-Sweep): Before G

深入理解_JVM内存管理典型配置举例09

以下配置主要针对分代垃圾回收算法而言: 1.堆大小设置: 年轻代的设置很关键JVM中最大堆大小有三方面限制: (1)相关操作系统的数据模型(32-bt还是64-bit)限制: (2)系统的可用虚拟内存限制: (3)系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G:64为操作系统对内存无限制.在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m. 典型设置: (1)场景一: java -Xmx3550m -Xms3550m -X

深入理解_JVM内存管理垃圾收集器05

1.垃圾收集器(内存回收方法的具体实现): 名词解释: 并行(Parallel):多条垃圾线程并行工作,但是此时用户线程仍然处于等待状态. 并发(Concurrent):指用户线程与垃圾收集线程同时执行(并不一定是并行的,可能会交替执行),用户程序继续运行,而垃圾收集程序运行于另一个CPU上. HotSpot虚拟机包含的所有收集器如下图: 说明: (a)JDK1.6_Update14之后引入了Early Access版G1收集器. (b)如果两个收集器之间存在连线,就说明它们可以搭配使用. <Y

你应该这样理解JVM内存管理

在进行Java程序设计时,一般不涉及内存的分配和内存回收的相关代码,此处引用一句话: Java和C++之间存在一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外的人想进去,墙里面的人想出来 ,个人从这两句话中,捕获到了 两个点 . java的自动内存管理机制,极大的节省了开发人员的精力,避免了易错且复杂的内存管理设计,相对于手动的内存管理这是极大的飞跃.java自动内存管理机制,其不能根据具体的场景提供最优的内存管理,其只提供普适的内存管理机制.想比于C++的手动内存管理,灵活性不够,存在制约系

深入理解Linux内存管理

引用:Live and Learn 1. 内存地址 以Intel的中央处理器为例,Linux 32位的系统中,物理内存的基本单位是字节(Byte),1个字节有8个二进制位.每个内存地址指向一个字节,内存地址加1后得到下一个字节的地址.这里用以表示物理内存实际位置的地址,就是通常所说的物理地址(Physical Address).CPU正在执行的进程代码.进程数据和栈区数据等,都临时保存在物理内存中. 线性地址(Linear Address,亦即虚拟地址 Virtual Address)是出于以下