JVM内存分析操作

JVM内存分析操作

JPS

用来查看基于HotSpot的JVM里面中,所有具有访问权限的Java进程的具体状态, 包括进程ID,进程启动的路径及启动参数等等,与unix上的ps类似,只不过jps是用来显示java进程,可以把jps理解为ps的一个子集。

查看当前运行的java项目的jvm配置

jps -v
常用参数说明

常用参数说明
-q 忽略输出的类名、Jar名以及传递给main方法的参数,只输出pid。
-m 输出传递给main方法的参数,如果是内嵌的JVM则输出为null。
-l 输出应用程序主类的完整包名,或者是应用程序JAR文件的完整路径。
-v 输出传给JVM的参数。
-V 输出通过标记的文件传递给JVM的参数(.hotspotrc文件,或者是通过参数-XX:Flags=< filename >指定的文件)。
-J 用于传递jvm选项到由javac调用的java加载器中,例如,“-J-Xms48m”将把启动内存设置为48M,使用-J选项可以非常方便的向基于Java的开发的底层虚拟机应用程序传递参数。

Jstack

jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息

** 打印进程的线程堆栈信息 **

jstack pid

Jstat

Jstat用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计,使用jstat我们可以对指定的JVM做如下监控:

  • 类的加载及卸载情况
  • 查看新生代、老生代及持久代的容量及使用情况
  • 查看新生代、老生代及持久代的垃圾收集情况,包括垃圾回收的次数及垃圾回收所占用的时间
  • 查看新生代中Eden区及Survior区中容量及分配情况等

打印执行过的GC

jstat -gc pid
jstat -gcutil pid

显示加载class的数量,及所占空间等信息

jstat -class pid

Jmap

打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。

基本参数:

-dump:[live,]format=b,file=< filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
-finalizerinfo 打印正等候回收的对象的信息.
-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.
-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
-J 传递参数给jmap启动的jvm.
pid 需要被打印配相信息的java进程id,可以用jps查问.

操作

内存占用情况

jmap -heap pid
Attaching to process ID 21232, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.121-b13

using thread-local object allocation.
Parallel GC with 2 thread(s)

Heap Configuration:
   # 堆使用率小于 n 的情况下进行收缩
   MinHeapFreeRatio         = 0
   # 堆使用率大于 n 的情况下进行收缩
   MaxHeapFreeRatio         = 100
   # 堆的最大大小
   MaxHeapSize              = 2097152000 (2000.0MB)
   # 新生代的初始大小
   NewSize                  = 89128960 (85.0MB)
   # 新生代的最大大小
   MaxNewSize               = 698875904 (666.5MB)
   # 老年代大小
   OldSize                  = 179306496 (171.0MB)
   # 新生代与老年代空间占用比率
   NewRatio                 = 2
   # 设置为8,则两个Survivor区与一个Eden区的比值为2:8
   SurvivorRatio            = 8
   # 分配给类元数据空间的初始大小
   MetaspaceSize            = 21807104 (20.796875MB)
   # 类指针压缩空间大小, 默认为1G
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
# 新生代
Eden Space:
   capacity = 508035072 (484.5MB)
   used     = 426823640 (407.05074310302734MB)
   free     = 81211432 (77.44925689697266MB)
   84.01460125965477% used
# Survivor1 
From Space:
   capacity = 2621440 (2.5MB)
   used     = 1659920 (1.5830230712890625MB)
   free     = 961520 (0.9169769287109375MB)
   63.3209228515625% used
# Survivor2    
To Space:
   capacity = 2621440 (2.5MB)
   used     = 0 (0.0MB)
   free     = 2621440 (2.5MB)
   0.0% used
# 老年代   
PS Old Generation
   capacity = 380108800 (362.5MB)
   used     = 208175720 (198.5318374633789MB)
   free     = 171933080 (163.9681625366211MB)
   54.76740343817349% used

38018 interned Strings occupying 4426664 bytes.

展示各类的内存占用情况,由大到小排列

jmap -histo pid

手动触发fullGC

jmap -histo:live pid

dump 将内存使用的详细情况输出到文件

jmap -dump:format=b,file=mem.dat pid 

拓展:JVM在遇到OutOfMemoryError时自动生成Dump文件

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path

Jhat用于对JAVA heap进行离线分析的工具


参考文章:https://blog.csdn.net/fenglibing/article/details/6411999

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值