Java虚拟机内存分析 Java进程分析常用命令

2018-07-02 22:31:00
admin
原创 1957
摘要:Java虚拟机内存分析 Java进程分析常用命令

一、Java虚拟机内存分析

内存分类:New新生代,Old老年代,Perm(永久内存、方法区、线程栈)。


新生代包括:1个Eden,2个Survivor。

Survivor存在的意义是减少被送到老年代的对象,进而减少Full GC的发生。Survivor的预筛选保证只有经历16次Minor GC还能在新生代中存活的对象,才会被送到老年代。设置两个Survivor区最大的好处就是解决了碎片化。


常用词汇:

Minor GC新生代回收,Major GC老年代回收。

YGC年轻代GC次数,YGCT年轻代GC时间,FGC,FGCT,GCT,时间变量是应用程序启动后累计统计时间。


设置比例:

NewRatio=X,老年代比新生代是X:1,默认值一般是2。

SurvivorRatio=X,Eden比Survivor是X:1:1,因为有2个Survivor区域,默认值一般是8。


保留内存:

保留内存ReservedMemory是虚拟机需要使用的物理内存。

增加JIT内存ReservedCodeCacheSize能够减少总体内存使用量。


JVM内存设置:

java -server -Xms64m -Xmx128m -XX:MaxNewSize=48m common.Main

JDK8.0开始PermSize相关设置不再支持。


二、Java进程分析常用命令

jinfo pid,查看运行时环境信息:虚拟机属性、虚拟机参数、命令行参数。

jstack pid,查看线程情况,tid是虚拟机的线程id,nid是操作系统的线程id。

arthas,阿尔萨斯,阿里巴巴出品的Java诊断工具。


jps,Java Virtual Machine Process Status Tool,查看Java进程列表的工具。

-l 显示包名

-m 显示参数

-v 显示虚拟机参数


jmap -heap pid,查看JVM内存使用整体情况。

jmap -histo[:live] pid | head -20,查看类的实例数以及占用的内存,live会触发垃圾回收。

jmap -dump:format=b,file=heap.bin pid,堆转储到文件。


jstat -gcutil pid,查看gc情况。

jstat -gc pid,查看gc情况,gc比gcutil信息更多。

发表评论
评论通过审核之后才会显示。