常用的垃圾收集器
ParNew 收集器
-XX:ParallelGCThreads 限制垃圾收集的线程数
Parallel Scavenge收集器
最大垃圾收集停顿时间 -XX:MaxGCPauseMillis 吞吐量大小 -XX:GCTimeRatio
调低最大垃圾收集停顿时间以牺牲吞吐量和新生代空间作为代价,直接导致垃圾收集变得更加频繁
新手向操作: -XX:UseAdaptiveSizePolicy GC 自适应调节策略
CMS 收集器
以获取最短回收停顿时间为目标的收集器,基于”标记-清除”实现. 核心优点:并发手机,低停顿
- 阿里云监控的案例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/acs/user/monitoragent/jre/bin/java -server
-Xmx128m
-Xms128m
-Xmn70m
-XX:SurvivorRatio=10
-XX:PermSize=25m
-XX:MaxPermSize=30m
-XX:+DisableExplicitGC
-XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:+UseCMSCompactAtFullCollection
-XX:+CMSClassUnloadingEnabled
-XX:LargePageSizeInBytes=128m
-XX:+UseFastAccessorMethods
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=70
-XX:+UseParNewGC
-verbose:gc
-Xloggc:/acs/monitor/system/monitoragent/logs/gc.log
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Duser.timezone=GMT+8
-Djava.endorsed.dirs=
-classpath /acs/user/monitoragent/lib:/acs/user/monitoragent/lib/aliyun-openservices-sls-v0.3-inner-0.1.0.jar:/acs/user/monitoragent/lib/aliyun-openservices-with-mqs.1.0.12.jar:/acs/user/monitoragent/lib/commons-beanutils-1.8.3.jar:/acs/user/monitoragent/lib/commons-codec-1.4.jar:/acs/user/monitoragent/lib/commons-collections-3.2.1.jar:/acs/user/monitoragent/lib/commons-digester-1.8.jar:/acs/user/monitoragent/lib/commons-httpclient-3.1.jar:/acs/user/monitoragent/lib/commons-lang-2.6.jar:/acs/user/monitoragent/lib/commons-lang3-3.1.jar:/acs/user/monitoragent/lib/commons-logging-1.0.4.jar:/acs/user/monitoragent/lib/commons-validator-1.4.0.jar:/acs/user/monitoragent/lib/diamond-client-3.6.7.jar:/acs/user/monitoragent/lib/diamond-utils-3.1.3.jar:/acs/user/monitoragent/lib/ezmorph-1.0.6.jar:/acs/user/monitoragent/lib/fastjson-1.2.41.jar:/acs/user/monitoragent/lib/hamcrest-core-1.1.jar:/acs/user/monitoragent/lib/httpclient-4.2.1.jar:/acs/user/monitoragent/lib/httpcore-4.2.1.jar:/acs/user/monitoragent/lib/jackson-core-lgpl-1.9.6.jar:/acs/user/monitoragent/lib/jackson-mapper-lgpl-1.9.6.jar:/acs/user/monitoragent/lib/jdom-1.1.jar:/acs/user/monitoragent/lib/json-lib-2.4-jdk15.jar:/acs/user/monitoragent/lib/junit-4.10.jar:/acs/user/monitoragent/lib/log4j-1.2.17.jar:/acs/user/monitoragent/lib/mysql-connector-java-5.1.25.jar:/acs/user/monitoragent/lib/netty-all-4.0.36.Final.jar:/acs/user/monitoragent/lib/nginx.agent.jar:/acs/user/monitoragent/lib/ons-api-1.1.5.jar:/acs/user/monitoragent/lib/ons-client-1.1.5.jar:/acs/user/monitoragent/lib/protobuf-java-2.4.1.jar:/acs/user/monitoragent/lib/rocketmq-client-3.6.4.jar:/acs/user/monitoragent/lib/rocketmq-common-3.6.4.jar:/acs/user/monitoragent/lib/rocketmq-remoting-3.6.4.jar:/acs/user/monitoragent/lib/slf4j-api-1.7.5.jar:/acs/user/monitoragent/lib/slf4j-log4j12-1.7.5.jar:/acs/user/monitoragent/lib/test.junit-4.8.1.jar:/acs/user/monitoragent/lib/test.junit.hamcrest-1.1.jar: -Dagent.home=/acs/user/monitoragent com.alibaba.ace.nginx.agent.Startup /acs/user/monitoragent/conf
G1收集器
https://t.hao0.me/jvm/2017/01/15/jvm-g1.html
ConcMarkSweepGC
推荐使用的是-Xmn参数,原因是这个参数很简洁,相当于一次性设定NewSize和MaxNewSIze,而且两者相等。-Xmn配合-Xms堆起始大小和-Xmx堆最大大小,恰好把堆内存布局确定完了(估计设计者也是因为简洁的原因,弄出了三个简写参数)。另外,官文似乎说-Xmn是1.4才开始支持的,但是如今应该没有还在用1.4之前的JRE的吧。
- 使用例子
1
2
3
4
5
6
7
8
9
10
java -jar
-Xms10g
-Xmx15g
-XX:+UseConcMarkSweepGC
-XX:NewSize=6g
-XX:MaxNewSize=6g
-verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:./log/gc.log Slaver.jar
jvm分析工具
jstat
jstat的好处是内置在jvm 中,使用简单粗暴
1
2
3
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
pid=1
jstat -gc $pid 3000 3000
1
2
3
4
5
6
7
8
9
10
11
12
–class 监视类装载、卸载数量、总空间及类装载所耗费的时间
–gc 监视Java堆状况,包括Eden区、2个Survivor区、老年代、永久代等的容量
–gccapacity 监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大和最小空间
–gcutil 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
–gccause 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因
–gcnew 监视新生代GC的状况
–gcnewcapacity 监视内容与-gcnew基本相同,输出主要关注使用到的最大和最小空间
–gcold 监视老年代GC的状况
–gcoldcapacity 监视内容与——gcold基本相同,输出主要关注使用到的最大和最小空间
–gcpermcapacity 输出永久代使用到的最大和最小空间
–compiler 输出JIT编译器编译过的方法、耗时等信息
–printcompilation 输出已经被JIT编译的方法
1、jstat –class
1
2
3
4
5
Loaded 装载的类的数量
Bytes 装载类所占用的字节数
Unloaded 卸载类的数量
Bytes 卸载类的字节数
Time 装载和卸载类所花费的时间
2、jstat -compiler
1
2
3
4
5
6
Compiled 编译任务执行数量
Failed 编译任务执行失败数量
Invalid 编译任务执行失效数量
Time 编译任务消耗时间
FailedType 最后一个编译失败任务的类型
FailedMethod 最后一个编译失败任务所在的类及方法
3、jstat -gc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)
4、jstat -gccapacity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
NGCMN 年轻代(young)中初始化(最小)的大小(字节)
NGCMX 年轻代(young)的最大容量 (字节)
NGC 年轻代(young)中当前的容量 (字节)
S0C 年轻代中第一个survivor(幸存区)的容量 (字节)
S1C 年轻代中第二个survivor(幸存区)的容量 (字节)
EC 年轻代中Eden(伊甸园)的容量 (字节)
OGCMN old代中初始化(最小)的大小 (字节)
OGCMX old代的最大容量(字节)
OGC old代当前新生成的容量 (字节)
OC Old代的容量 (字节)
PGCMN perm代中初始化(最小)的大小 (字节)
PGCMX perm代的最大容量 (字节)
PGC perm代当前新生成的容量 (字节)
PC Perm(持久代)的容量 (字节)
YGC 从应用程序启动到采样时年轻代中gc次数
FGC 从应用程序启动到采样时old代(全gc)gc次数
5、jstat -gcutil
1
2
3
4
5
6
7
8
9
10
S0 年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1 年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E 年轻代中Eden(伊甸园)已使用的占当前容量百分比
O old代已使用的占当前容量百分比
P perm代已使用的占当前容量百分比
YGC 从应用程序启动到采样时年轻代中gc次数
YGCT 从应用程序启动到采样时年轻代中gc所用时间(s)
FGC 从应用程序启动到采样时old代(全gc)gc次数
FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT 从应用程序启动到采样时gc用的总时间(s)
6、jstat -gcnew
1
2
3
4
5
6
7
8
9
10
S0C 年轻代中第一个survivor(幸存区)的容量 (字节)
S1C 年轻代中第二个survivor(幸存区)的容量 (字节)
S0U 年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U 年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
TT 持有次数限制
MTT 最大持有次数限制
EC 年轻代中Eden(伊甸园)的容量 (字节)
EU 年轻代中Eden(伊甸园)目前已使用空间 (字节)
YGC 从应用程序启动到采样时年轻代中gc次数
YGCT 从应用程序启动到采样时年轻代中gc所用时间(s)
7、jstat -gcnewcapacity
1
2
3
4
5
6
7
8
9
10
11
NGCMN 年轻代(young)中初始化(最小)的大小(字节)
NGCMX 年轻代(young)的最大容量 (字节)
NGC 年轻代(young)中当前的容量 (字节)
S0CMX 年轻代中第一个survivor(幸存区)的最大容量 (字节)
S0C 年轻代中第一个survivor(幸存区)的容量 (字节)
S1CMX 年轻代中第二个survivor(幸存区)的最大容量 (字节)
S1C 年轻代中第二个survivor(幸存区)的容量 (字节)
ECMX 年轻代中Eden(伊甸园)的最大容量 (字节)
EC 年轻代中Eden(伊甸园)的容量 (字节)
YGC 从应用程序启动到采样时年轻代中gc次数
FGC 从应用程序启动到采样时old代(全gc)gc次数
8、jstat -gcold
1
2
3
4
5
6
7
8
PC Perm(持久代)的容量 (字节)
PU Perm(持久代)目前已使用空间 (字节)
OC Old代的容量 (字节)
OU Old代目前已使用空间 (字节)
YGC 从应用程序启动到采样时年轻代中gc次数
FGC 从应用程序启动到采样时old代(全gc)gc次数
FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT 从应用程序启动到采样时gc用的总时间(s)
9、stat -gcoldcapacity
1
2
3
4
5
6
7
8
OGCMN old代中初始化(最小)的大小 (字节)
OGCMX old代的最大容量(字节)
OGC old代当前新生成的容量 (字节)
OC Old代的容量 (字节)
YGC 从应用程序启动到采样时年轻代中gc次数
FGC 从应用程序启动到采样时old代(全gc)gc次数
FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT 从应用程序启动到采样时gc用的总时间(s)
10、jstat -gcpermcapacity
1
2
3
4
5
6
7
8
PGCMN perm代中初始化(最小)的大小 (字节)
PGCMX perm代的最大容量 (字节)
PGC perm代当前新生成的容量 (字节)
PC Perm(持久代)的容量 (字节)
YGC 从应用程序启动到采样时年轻代中gc次数
FGC 从应用程序启动到采样时old代(全gc)gc次数
FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT 从应用程序启动到采样时gc用的总时间(s)
11、jstat -printcompilation
1
2
3
4
Compiled 编译任务的数目
Size 方法生成的字节码的大小
Type 编译类型
Method 类名和方法名用来标识编译的方法。类名使用/做为一个命名空间分隔符。方法名是给定类中的方法。上述格式是由-XX:+PrintComplation选项进行设置的
MemoryAnalyzer
参考链接
- JVM调优:选择合适的GC collector (三)
- 深入理解 Java G1 垃圾收集器
- 成为JavaGC专家(1)—深入浅出Java垃圾回收机制
- 成为JavaGC专家(2)—如何监控Java垃圾回收机制
- 成为Java GC专家(3)—如何优化Java垃圾回收机制
- 成为Java GC专家(4)—Apache的MaxClients参数详解及其在Tomcat执行FullGC时的影响
- JVM系列三:JVM参数设置、分析
- 介绍Java GC种类,并更换 调优GC
- Java 垃圾回收机制(以及怎么减少调用GC,提高性能)
- What Is Garbage Collection?
- 频繁GC (Allocation Failure)及young gc时间过长分析
- JVM系列三:JVM参数设置、分析
- javaGC调优
- Java Hotspot G1 GC的一些关键技术
- JVM
- JVM(java 虚拟机)内存设置
- java jstat 用法
- jstat命令详解
- jstat使用详解(分析JVM的使用情况)
- java类的加载机制
- G1(Garbage First)的使用
- Java命令学习系列(4):Jstat
- JVM问题分析处理手册
- JVM调优总结 -Xms -Xmx -Xmn -Xss
Common Garbage Collectors
ParNew Collector
-XX:ParallelGCThreads Limit the number of garbage collection threads
Parallel Scavenge Collector
Maximum garbage collection pause time -XX:MaxGCPauseMillis Throughput size -XX:GCTimeRatio
Lowering maximum garbage collection pause time comes at the cost of throughput and new generation space, directly causing garbage collection to become more frequent
Beginner-friendly operation: -XX:UseAdaptiveSizePolicy GC adaptive adjustment strategy
CMS Collector
A collector targeting shortest recovery pause time, implemented based on “mark-sweep”. Core advantage: concurrent collection, low pause
- Alibaba Cloud monitoring case
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/acs/user/monitoragent/jre/bin/java -server
-Xmx128m
-Xms128m
-Xmn70m
-XX:SurvivorRatio=10
-XX:PermSize=25m
-XX:MaxPermSize=30m
-XX:+DisableExplicitGC
-XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:+UseCMSCompactAtFullCollection
-XX:+CMSClassUnloadingEnabled
-XX:LargePageSizeInBytes=128m
-XX:+UseFastAccessorMethods
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=70
-XX:+UseParNewGC
-verbose:gc
-Xloggc:/acs/monitor/system/monitoragent/logs/gc.log
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Duser.timezone=GMT+8
-Djava.endorsed.dirs=
-classpath /acs/user/monitoragent/lib:/acs/user/monitoragent/lib/aliyun-openservices-sls-v0.3-inner-0.1.0.jar:/acs/user/monitoragent/lib/aliyun-openservices-with-mqs.1.0.12.jar:/acs/user/monitoragent/lib/commons-beanutils-1.8.3.jar:/acs/user/monitoragent/lib/commons-codec-1.4.jar:/acs/user/monitoragent/lib/commons-collections-3.2.1.jar:/acs/user/monitoragent/lib/commons-digester-1.8.jar:/acs/user/monitoragent/lib/commons-httpclient-3.1.jar:/acs/user/monitoragent/lib/commons-lang-2.6.jar:/acs/user/monitoragent/lib/commons-lang3-3.1.jar:/acs/user/monitoragent/lib/commons-logging-1.0.4.jar:/acs/user/monitoragent/lib/commons-validator-1.4.0.jar:/acs/user/monitoragent/lib/diamond-client-3.6.7.jar:/acs/user/monitoragent/lib/diamond-utils-3.1.3.jar:/acs/user/monitoragent/lib/ezmorph-1.0.6.jar:/acs/user/monitoragent/lib/fastjson-1.2.41.jar:/acs/user/monitoragent/lib/hamcrest-core-1.1.jar:/acs/user/monitoragent/lib/httpclient-4.2.1.jar:/acs/user/monitoragent/lib/httpcore-4.2.1.jar:/acs/user/monitoragent/lib/jackson-core-lgpl-1.9.6.jar:/acs/user/monitoragent/lib/jackson-mapper-lgpl-1.9.6.jar:/acs/user/monitoragent/lib/jdom-1.1.jar:/acs/user/monitoragent/lib/json-lib-2.4-jdk15.jar:/acs/user/monitoragent/lib/junit-4.10.jar:/acs/user/monitoragent/lib/log4j-1.2.17.jar:/acs/user/monitoragent/lib/mysql-connector-java-5.1.25.jar:/acs/user/monitoragent/lib/netty-all-4.0.36.Final.jar:/acs/user/monitoragent/lib/nginx.agent.jar:/acs/user/monitoragent/lib/ons-api-1.1.5.jar:/acs/user/monitoragent/lib/ons-client-1.1.5.jar:/acs/user/monitoragent/lib/protobuf-java-2.4.1.jar:/acs/user/monitoragent/lib/rocketmq-client-3.6.4.jar:/acs/user/monitoragent/lib/rocketmq-common-3.6.4.jar:/acs/user/monitoragent/lib/rocketmq-remoting-3.6.4.jar:/acs/user/monitoragent/lib/slf4j-api-1.7.5.jar:/acs/user/monitoragent/lib/slf4j-log4j12-1.7.5.jar:/acs/user/monitoragent/lib/test.junit-4.8.1.jar:/acs/user/monitoragent/lib/test.junit.hamcrest-1.1.jar: -Dagent.home=/acs/user/monitoragent com.alibaba.ace.nginx.agent.Startup /acs/user/monitoragent/conf
G1 Collector
https://t.hao0.me/jvm/2017/01/15/jvm-g1.html
ConcMarkSweepGC
The recommended parameter is -Xmn, because this parameter is very concise, equivalent to setting NewSize and MaxNewSize at once, and both are equal. -Xmn combined with -Xms heap starting size and -Xmx heap maximum size, exactly determines the heap memory layout (the designer probably also created three shorthand parameters for simplicity). Also, the official docs seem to say -Xmn started being supported in 1.4, but nowadays there shouldn’t be anyone still using JRE before 1.4, right?
- Usage example
1
2
3
4
5
6
7
8
9
10
java -jar
-Xms10g
-Xmx15g
-XX:+UseConcMarkSweepGC
-XX:NewSize=6g
-XX:MaxNewSize=6g
-verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:./log/gc.log Slaver.jar
JVM Analysis Tools
jstat
jstat’s advantage is that it’s built into the JVM, simple and brutal to use
1
2
3
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
pid=1
jstat -gc $pid 3000 3000
1
2
3
4
5
6
7
8
9
10
11
12
–class Monitor class loading, unloading count, total space and time spent loading classes
–gc Monitor Java heap status, including Eden area, 2 Survivor areas, old generation, permanent generation capacity, etc.
–gccapacity Monitor content is basically the same as -gc, but output mainly focuses on maximum and minimum space used in each Java heap area
–gcutil Monitor content is basically the same as -gc, but output mainly focuses on percentage of used space to total space
–gccause Same function as -gcutil, but will additionally output the cause of the last GC
–gcnew Monitor new generation GC status
–gcnewcapacity Monitor content is basically the same as -gcnew, output mainly focuses on maximum and minimum space used
–gcold Monitor old generation GC status
–gcoldcapacity Monitor content is basically the same as ——gcold, output mainly focuses on maximum and minimum space used
–gcpermcapacity Output maximum and minimum space used in permanent generation
–compiler Output methods compiled by JIT compiler, time consumed, etc.
–printcompilation Output methods that have been JIT compiled
- jstat –class
: Display loaded class count, space occupied, etc. 1 2 3 4 5
Loaded Number of loaded classes Bytes Bytes occupied by loaded classes Unloaded Number of unloaded classes Bytes Bytes of unloaded classes Time Time spent loading and unloading classes
- jstat -compiler
Display VM real-time compilation count, etc. 1 2 3 4 5 6
Compiled Number of compilation tasks executed Failed Number of compilation task execution failures Invalid Number of compilation task execution invalidations Time Time consumed by compilation tasks FailedType Type of the last failed compilation task FailedMethod Class and method where the last failed compilation task is located
- jstat -gc
: Can display GC information, view GC count and time. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
S0C Capacity of first survivor (survivor area) in young generation (bytes) S1C Capacity of second survivor (survivor area) in young generation (bytes) S0U Currently used space of first survivor (survivor area) in young generation (bytes) S1U Currently used space of second survivor (survivor area) in young generation (bytes) EC Capacity of Eden (Garden of Eden) in young generation (bytes) EU Currently used space of Eden (Garden of Eden) in young generation (bytes) OC Capacity of Old generation (bytes) OU Currently used space of Old generation (bytes) PC Capacity of Perm (persistent generation) (bytes) PU Currently used space of Perm (persistent generation) (bytes) YGC Number of GCs in young generation from application startup to sampling YGCT Time spent on GCs in young generation from application startup to sampling (s) FGC Number of GCs in old generation (full GC) from application startup to sampling FGCT Time spent on GCs in old generation (full GC) from application startup to sampling (s) GCT Total time spent on GC from application startup to sampling (s)
- jstat -gccapacity
: Can display usage and occupied size of three generations (young, old, perm) objects in VM memory 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
NGCMN Initialized (minimum) size in young generation (young) (bytes) NGCMX Maximum capacity of young generation (young) (bytes) NGC Current capacity of young generation (young) (bytes) S0C Capacity of first survivor (survivor area) in young generation (bytes) S1C Capacity of second survivor (survivor area) in young generation (bytes) EC Capacity of Eden (Garden of Eden) in young generation (bytes) OGCMN Initialized (minimum) size in old generation (bytes) OGCMX Maximum capacity of old generation (bytes) OGC Currently newly generated capacity of old generation (bytes) OC Capacity of Old generation (bytes) PGCMN Initialized (minimum) size in perm generation (bytes) PGCMX Maximum capacity of perm generation (bytes) PGC Currently newly generated capacity of perm generation (bytes) PC Capacity of Perm (persistent generation) (bytes) YGC Number of GCs in young generation from application startup to sampling FGC Number of GCs in old generation (full GC) from application startup to sampling
- jstat -gcutil
: Statistics GC information 1 2 3 4 5 6 7 8 9 10
S0 Percentage of used space of first survivor (survivor area) in young generation to current capacity S1 Percentage of used space of second survivor (survivor area) in young generation to current capacity E Percentage of used space of Eden (Garden of Eden) in young generation to current capacity O Percentage of used space of old generation to current capacity P Percentage of used space of perm generation to current capacity YGC Number of GCs in young generation from application startup to sampling YGCT Time spent on GCs in young generation from application startup to sampling (s) FGC Number of GCs in old generation (full GC) from application startup to sampling FGCT Time spent on GCs in old generation (full GC) from application startup to sampling (s) GCT Total time spent on GC from application startup to sampling (s)
- jstat -gcnew
: Information about young generation objects.
1
2
3
4
5
6
7
8
9
10
S0C Capacity of first survivor (survivor area) in young generation (bytes)
S1C Capacity of second survivor (survivor area) in young generation (bytes)
S0U Currently used space of first survivor (survivor area) in young generation (bytes)
S1U Currently used space of second survivor (survivor area) in young generation (bytes)
TT Holding count limit
MTT Maximum holding count limit
EC Capacity of Eden (Garden of Eden) in young generation (bytes)
EU Currently used space of Eden (Garden of Eden) in young generation (bytes)
YGC Number of GCs in young generation from application startup to sampling
YGCT Time spent on GCs in young generation from application startup to sampling (s)
- jstat -gcnewcapacity
: Information about young generation objects and their usage.
1
2
3
4
5
6
7
8
9
10
11
NGCMN Initialized (minimum) size in young generation (young) (bytes)
NGCMX Maximum capacity of young generation (young) (bytes)
NGC Current capacity of young generation (young) (bytes)
S0CMX Maximum capacity of first survivor (survivor area) in young generation (bytes)
S0C Capacity of first survivor (survivor area) in young generation (bytes)
S1CMX Maximum capacity of second survivor (survivor area) in young generation (bytes)
S1C Capacity of second survivor (survivor area) in young generation (bytes)
ECMX Maximum capacity of Eden (Garden of Eden) in young generation (bytes)
EC Capacity of Eden (Garden of Eden) in young generation (bytes)
YGC Number of GCs in young generation from application startup to sampling
FGC Number of GCs in old generation (full GC) from application startup to sampling
- jstat -gcold
: Information about old generation objects. 1 2 3 4 5 6 7 8
PC Capacity of Perm (persistent generation) (bytes) PU Currently used space of Perm (persistent generation) (bytes) OC Capacity of Old generation (bytes) OU Currently used space of Old generation (bytes) YGC Number of GCs in young generation from application startup to sampling FGC Number of GCs in old generation (full GC) from application startup to sampling FGCT Time spent on GCs in old generation (full GC) from application startup to sampling (s) GCT Total time spent on GC from application startup to sampling (s)
- stat -gcoldcapacity
: Information about old generation objects and their usage. 1 2 3 4 5 6 7 8
OGCMN Initialized (minimum) size in old generation (bytes) OGCMX Maximum capacity of old generation (bytes) OGC Currently newly generated capacity of old generation (bytes) OC Capacity of Old generation (bytes) YGC Number of GCs in young generation from application startup to sampling FGC Number of GCs in old generation (full GC) from application startup to sampling FGCT Time spent on GCs in old generation (full GC) from application startup to sampling (s) GCT Total time spent on GC from application startup to sampling (s)
- jstat -gcpermcapacity
: Information about perm objects and their usage. 1 2 3 4 5 6 7 8
PGCMN Initialized (minimum) size in perm generation (bytes) PGCMX Maximum capacity of perm generation (bytes) PGC Currently newly generated capacity of perm generation (bytes) PC Capacity of Perm (persistent generation) (bytes) YGC Number of GCs in young generation from application startup to sampling FGC Number of GCs in old generation (full GC) from application startup to sampling FGCT Time spent on GCs in old generation (full GC) from application startup to sampling (s) GCT Total time spent on GC from application startup to sampling (s)
- jstat -printcompilation
: Current VM execution information. 1 2 3 4
Compiled Number of compilation tasks Size Size of bytecode generated by methods Type Compilation type Method Class name and method name used to identify compiled methods. Class names use / as a namespace separator. Method name is the method in the given class. The above format is set by the -XX:+PrintComplation option
MemoryAnalyzer
References
- JVM Tuning: Choosing the Right GC Collector (Three)
- Deep Understanding of Java G1 Garbage Collector
- Becoming a JavaGC Expert (1)—In-depth and Easy-to-understand Java Garbage Collection Mechanism
- Becoming a JavaGC Expert (2)—How to Monitor Java Garbage Collection Mechanism
- Becoming a Java GC Expert (3)—How to Optimize Java Garbage Collection Mechanism
- Becoming a Java GC Expert (4)—Detailed Explanation of Apache’s MaxClients Parameter and Its Impact on Tomcat FullGC Execution
- JVM Series Three: JVM Parameter Settings and Analysis
- Introducing Java GC Types and Replacing/Tuning GC
- Java Garbage Collection Mechanism (and How to Reduce GC Calls and Improve Performance)
- What Is Garbage Collection?
- Frequent GC (Allocation Failure) and Long Young GC Time Analysis
- JVM Series Three: JVM Parameter Settings and Analysis
- javaGC Tuning
- Some Key Technologies of Java Hotspot G1 GC
- JVM
- JVM (java virtual machine) Memory Settings
- java jstat Usage
- jstat Command Detailed Explanation
- jstat Usage Detailed Explanation (Analyzing JVM Usage)
- java Class Loading Mechanism
- G1(Garbage First) Usage
- Java Command Learning Series (4): Jstat
- JVM Problem Analysis and Handling Manual
- JVM Tuning Summary -Xms -Xmx -Xmn -Xss
一般的なガベージコレクタ
ParNewコレクタ
-XX:ParallelGCThreads ガベージコレクションのスレッド数を制限します
Parallel Scavengeコレクタ
最大ガベージコレクション一時停止時間 -XX:MaxGCPauseMillis スループットサイズ -XX:GCTimeRatio
最大ガベージコレクション一時停止時間を下げることは、スループットと新世代スペースを犠牲にして、ガベージコレクションをより頻繁にします
初心者向け操作: -XX:UseAdaptiveSizePolicy GC適応調整戦略
CMSコレクタ
最短回収一時停止時間を目標とするコレクタで、「マーク-スイープ」に基づいて実装されています。 核心的な利点:並行収集、低一時停止
- Alibaba Cloud監視のケース
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/acs/user/monitoragent/jre/bin/java -server
-Xmx128m
-Xms128m
-Xmn70m
-XX:SurvivorRatio=10
-XX:PermSize=25m
-XX:MaxPermSize=30m
-XX:+DisableExplicitGC
-XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:+UseCMSCompactAtFullCollection
-XX:+CMSClassUnloadingEnabled
-XX:LargePageSizeInBytes=128m
-XX:+UseFastAccessorMethods
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=70
-XX:+UseParNewGC
-verbose:gc
-Xloggc:/acs/monitor/system/monitoragent/logs/gc.log
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Duser.timezone=GMT+8
-Djava.endorsed.dirs=
-classpath /acs/user/monitoragent/lib:/acs/user/monitoragent/lib/aliyun-openservices-sls-v0.3-inner-0.1.0.jar:/acs/user/monitoragent/lib/aliyun-openservices-with-mqs.1.0.12.jar:/acs/user/monitoragent/lib/commons-beanutils-1.8.3.jar:/acs/user/monitoragent/lib/commons-codec-1.4.jar:/acs/user/monitoragent/lib/commons-collections-3.2.1.jar:/acs/user/monitoragent/lib/commons-digester-1.8.jar:/acs/user/monitoragent/lib/commons-httpclient-3.1.jar:/acs/user/monitoragent/lib/commons-lang-2.6.jar:/acs/user/monitoragent/lib/commons-lang3-3.1.jar:/acs/user/monitoragent/lib/commons-logging-1.0.4.jar:/acs/user/monitoragent/lib/commons-validator-1.4.0.jar:/acs/user/monitoragent/lib/diamond-client-3.6.7.jar:/acs/user/monitoragent/lib/diamond-utils-3.1.3.jar:/acs/user/monitoragent/lib/ezmorph-1.0.6.jar:/acs/user/monitoragent/lib/fastjson-1.2.41.jar:/acs/user/monitoragent/lib/hamcrest-core-1.1.jar:/acs/user/monitoragent/lib/httpclient-4.2.1.jar:/acs/user/monitoragent/lib/httpcore-4.2.1.jar:/acs/user/monitoragent/lib/jackson-core-lgpl-1.9.6.jar:/acs/user/monitoragent/lib/jackson-mapper-lgpl-1.9.6.jar:/acs/user/monitoragent/lib/jdom-1.1.jar:/acs/user/monitoragent/lib/json-lib-2.4-jdk15.jar:/acs/user/monitoragent/lib/junit-4.10.jar:/acs/user/monitoragent/lib/log4j-1.2.17.jar:/acs/user/monitoragent/lib/mysql-connector-java-5.1.25.jar:/acs/user/monitoragent/lib/netty-all-4.0.36.Final.jar:/acs/user/monitoragent/lib/nginx.agent.jar:/acs/user/monitoragent/lib/ons-api-1.1.5.jar:/acs/user/monitoragent/lib/ons-client-1.1.5.jar:/acs/user/monitoragent/lib/protobuf-java-2.4.1.jar:/acs/user/monitoragent/lib/rocketmq-client-3.6.4.jar:/acs/user/monitoragent/lib/rocketmq-common-3.6.4.jar:/acs/user/monitoragent/lib/rocketmq-remoting-3.6.4.jar:/acs/user/monitoragent/lib/slf4j-api-1.7.5.jar:/acs/user/monitoragent/lib/slf4j-log4j12-1.7.5.jar:/acs/user/monitoragent/lib/test.junit-4.8.1.jar:/acs/user/monitoragent/lib/test.junit.hamcrest-1.1.jar: -Dagent.home=/acs/user/monitoragent com.alibaba.ace.nginx.agent.Startup /acs/user/monitoragent/conf
G1コレクタ
https://t.hao0.me/jvm/2017/01/15/jvm-g1.html
ConcMarkSweepGC
推奨されるパラメータは-Xmnです。このパラメータは非常に簡潔で、NewSizeとMaxNewSizeを一度に設定するのと同等で、両者は等しいです。-Xmnは-Xmsヒープ開始サイズと-Xmxヒープ最大サイズと組み合わせて、ヒープメモリレイアウトを正確に決定します(設計者も簡潔さのために3つの短縮パラメータを作ったと推定されます)。また、公式文書では-Xmnは1.4からサポートされているようですが、現在は1.4より前のJREを使用している人はいないはずです。
- 使用例
1
2
3
4
5
6
7
8
9
10
java -jar
-Xms10g
-Xmx15g
-XX:+UseConcMarkSweepGC
-XX:NewSize=6g
-XX:MaxNewSize=6g
-verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:./log/gc.log Slaver.jar
jvm分析ツール
jstat
jstatの利点は、jvmに組み込まれており、使用が簡単で直接的なことです
1
2
3
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
pid=1
jstat -gc $pid 3000 3000
1
2
3
4
5
6
7
8
9
10
11
12
–class クラスのロード、アンロード数、総スペース、クラスのロードに費やされた時間を監視
–gc Javaヒープの状態を監視。Edenエリア、2つのSurvivorエリア、老世代、永続世代などの容量を含む
–gccapacity 監視内容は-gcとほぼ同じですが、出力は主にJavaヒープの各領域で使用される最大および最小スペースに焦点を当てています
–gcutil 監視内容は-gcとほぼ同じですが、出力は主に使用済みスペースが総スペースに占める割合に焦点を当てています
–gccause -gcutilと同じ機能ですが、最後のGCの原因を追加で出力します
–gcnew 新世代GCの状態を監視
–gcnewcapacity 監視内容は-gcnewとほぼ同じですが、出力は主に使用される最大および最小スペースに焦点を当てています
–gcold 老世代GCの状態を監視
–gcoldcapacity 監視内容は——gcoldとほぼ同じですが、出力は主に使用される最大および最小スペースに焦点を当てています
–gcpermcapacity 永続世代で使用される最大および最小スペースを出力
–compiler JITコンパイラによってコンパイルされたメソッド、時間消費などの情報を出力
–printcompilation JITコンパイルされたメソッドを出力
- jstat –class
:ロードされたクラスの数、占有スペースなどの情報を表示します。 1 2 3 4 5
Loaded ロードされたクラスの数 Bytes ロードされたクラスが占有するバイト数 Unloaded アンロードされたクラスの数 Bytes アンロードされたクラスのバイト数 Time クラスのロードとアンロードに費やされた時間
- jstat -compiler
VMリアルタイムコンパイルの数などの情報を表示します。 1 2 3 4 5 6
Compiled コンパイルタスクの実行数 Failed コンパイルタスクの実行失敗数 Invalid コンパイルタスクの実行無効化数 Time コンパイルタスクの消費時間 FailedType 最後に失敗したコンパイルタスクのタイプ FailedMethod 最後に失敗したコンパイルタスクが存在するクラスとメソッド
- jstat -gc
:GC情報を表示し、GCの回数と時間を確認できます。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
S0C 若世代の最初のsurvivor(サバイバーエリア)の容量(バイト) S1C 若世代の2番目のsurvivor(サバイバーエリア)の容量(バイト) S0U 若世代の最初のsurvivor(サバイバーエリア)の現在使用スペース(バイト) S1U 若世代の2番目のsurvivor(サバイバーエリア)の現在使用スペース(バイト) EC 若世代のEden(エデンの園)の容量(バイト) EU 若世代のEden(エデンの園)の現在使用スペース(バイト) OC Old世代の容量(バイト) OU Old世代の現在使用スペース(バイト) PC Perm(永続世代)の容量(バイト) PU Perm(永続世代)の現在使用スペース(バイト) YGC アプリケーション起動からサンプリング時までの若世代のGC回数 YGCT アプリケーション起動からサンプリング時までの若世代のGCに費やされた時間(秒) FGC アプリケーション起動からサンプリング時までのold世代(フルGC)のGC回数 FGCT アプリケーション起動からサンプリング時までのold世代(フルGC)のGCに費やされた時間(秒) GCT アプリケーション起動からサンプリング時までのGCに費やされた総時間(秒)
- jstat -gccapacity
:VMメモリ内の3世代(young、old、perm)オブジェクトの使用と占有サイズを表示できます 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
NGCMN 若世代(young)の初期化(最小)サイズ(バイト) NGCMX 若世代(young)の最大容量(バイト) NGC 若世代(young)の現在の容量(バイト) S0C 若世代の最初のsurvivor(サバイバーエリア)の容量(バイト) S1C 若世代の2番目のsurvivor(サバイバーエリア)の容量(バイト) EC 若世代のEden(エデンの園)の容量(バイト) OGCMN old世代の初期化(最小)サイズ(バイト) OGCMX old世代の最大容量(バイト) OGC old世代の現在新しく生成された容量(バイト) OC Old世代の容量(バイト) PGCMN perm世代の初期化(最小)サイズ(バイト) PGCMX perm世代の最大容量(バイト) PGC perm世代の現在新しく生成された容量(バイト) PC Perm(永続世代)の容量(バイト) YGC アプリケーション起動からサンプリング時までの若世代のGC回数 FGC アプリケーション起動からサンプリング時までのold世代(フルGC)のGC回数
- jstat -gcutil
:GC情報を統計します 1 2 3 4 5 6 7 8 9 10
S0 若世代の最初のsurvivor(サバイバーエリア)の使用済みが現在の容量に対する割合 S1 若世代の2番目のsurvivor(サバイバーエリア)の使用済みが現在の容量に対する割合 E 若世代のEden(エデンの園)の使用済みが現在の容量に対する割合 O old世代の使用済みが現在の容量に対する割合 P perm世代の使用済みが現在の容量に対する割合 YGC アプリケーション起動からサンプリング時までの若世代のGC回数 YGCT アプリケーション起動からサンプリング時までの若世代のGCに費やされた時間(秒) FGC アプリケーション起動からサンプリング時までのold世代(フルGC)のGC回数 FGCT アプリケーション起動からサンプリング時までのold世代(フルGC)のGCに費やされた時間(秒) GCT アプリケーション起動からサンプリング時までのGCに費やされた総時間(秒)
- jstat -gcnew
:若世代オブジェクトの情報。
1
2
3
4
5
6
7
8
9
10
S0C 若世代の最初のsurvivor(サバイバーエリア)の容量(バイト)
S1C 若世代の2番目のsurvivor(サバイバーエリア)の容量(バイト)
S0U 若世代の最初のsurvivor(サバイバーエリア)の現在使用スペース(バイト)
S1U 若世代の2番目のsurvivor(サバイバーエリア)の現在使用スペース(バイト)
TT 保持回数制限
MTT 最大保持回数制限
EC 若世代のEden(エデンの園)の容量(バイト)
EU 若世代のEden(エデンの園)の現在使用スペース(バイト)
YGC アプリケーション起動からサンプリング時までの若世代のGC回数
YGCT アプリケーション起動からサンプリング時までの若世代のGCに費やされた時間(秒)
- jstat -gcnewcapacity
:若世代オブジェクトの情報とその使用量。
1
2
3
4
5
6
7
8
9
10
11
NGCMN 若世代(young)の初期化(最小)サイズ(バイト)
NGCMX 若世代(young)の最大容量(バイト)
NGC 若世代(young)の現在の容量(バイト)
S0CMX 若世代の最初のsurvivor(サバイバーエリア)の最大容量(バイト)
S0C 若世代の最初のsurvivor(サバイバーエリア)の容量(バイト)
S1CMX 若世代の2番目のsurvivor(サバイバーエリア)の最大容量(バイト)
S1C 若世代の2番目のsurvivor(サバイバーエリア)の容量(バイト)
ECMX 若世代のEden(エデンの園)の最大容量(バイト)
EC 若世代のEden(エデンの園)の容量(バイト)
YGC アプリケーション起動からサンプリング時までの若世代のGC回数
FGC アプリケーション起動からサンプリング時までのold世代(フルGC)のGC回数
- jstat -gcold
:old世代オブジェクトの情報。 1 2 3 4 5 6 7 8
PC Perm(永続世代)の容量(バイト) PU Perm(永続世代)の現在使用スペース(バイト) OC Old世代の容量(バイト) OU Old世代の現在使用スペース(バイト) YGC アプリケーション起動からサンプリング時までの若世代のGC回数 FGC アプリケーション起動からサンプリング時までのold世代(フルGC)のGC回数 FGCT アプリケーション起動からサンプリング時までのold世代(フルGC)のGCに費やされた時間(秒) GCT アプリケーション起動からサンプリング時までのGCに費やされた総時間(秒)
- stat -gcoldcapacity
:old世代オブジェクトの情報とその使用量。 1 2 3 4 5 6 7 8
OGCMN old世代の初期化(最小)サイズ(バイト) OGCMX old世代の最大容量(バイト) OGC old世代の現在新しく生成された容量(バイト) OC Old世代の容量(バイト) YGC アプリケーション起動からサンプリング時までの若世代のGC回数 FGC アプリケーション起動からサンプリング時までのold世代(フルGC)のGC回数 FGCT アプリケーション起動からサンプリング時までのold世代(フルGC)のGCに費やされた時間(秒) GCT アプリケーション起動からサンプリング時までのGCに費やされた総時間(秒)
- jstat -gcpermcapacity
:permオブジェクトの情報とその使用量。 1 2 3 4 5 6 7 8
PGCMN perm世代の初期化(最小)サイズ(バイト) PGCMX perm世代の最大容量(バイト) PGC perm世代の現在新しく生成された容量(バイト) PC Perm(永続世代)の容量(バイト) YGC アプリケーション起動からサンプリング時までの若世代のGC回数 FGC アプリケーション起動からサンプリング時までのold世代(フルGC)のGC回数 FGCT アプリケーション起動からサンプリング時までのold世代(フルGC)のGCに費やされた時間(秒) GCT アプリケーション起動からサンプリング時までのGCに費やされた総時間(秒)
- jstat -printcompilation
:現在のVM実行情報。 1 2 3 4
Compiled コンパイルタスクの数 Size メソッドによって生成されたバイトコードのサイズ Type コンパイルタイプ Method コンパイルされたメソッドを識別するために使用されるクラス名とメソッド名。クラス名は/を名前空間区切り文字として使用します。メソッド名は指定されたクラス内のメソッドです。上記の形式は-XX:+PrintComplationオプションによって設定されます
MemoryAnalyzer
参考リンク
- JVMチューニング:適切なGCコレクタを選択(三)
- Java G1ガベージコレクタの深い理解
- JavaGCエキスパートになる(1)—Javaガベージ回収メカニズムの深い理解
- JavaGCエキスパートになる(2)—Javaガベージ回収メカニズムを監視する方法
- Java GCエキスパートになる(3)—Javaガベージ回収メカニズムを最適化する方法
- Java GCエキスパートになる(4)—ApacheのMaxClientsパラメータの詳細説明とTomcatのFullGC実行への影響
- JVMシリーズ三:JVMパラメータ設定、分析
- Java GCの種類を紹介し、GCを交換・チューニング
- Javaガベージ回収メカニズム(およびGC呼び出しを減らし、パフォーマンスを向上させる方法)
- What Is Garbage Collection?
- 頻繁なGC(Allocation Failure)およびyoung gc時間が長すぎる分析
- JVMシリーズ三:JVMパラメータ設定、分析
- javaGCチューニング
- Java Hotspot G1 GCのいくつかの主要技術
- JVM
- JVM(java仮想マシン)メモリ設定
- java jstatの使い方
- jstatコマンドの詳細説明
- jstat使用の詳細説明(JVMの使用状況を分析)
- javaクラスのロードメカニズム
- G1(Garbage First)の使用
- Javaコマンド学習シリーズ(4):Jstat
- JVM問題分析処理マニュアル
- JVMチューニングのまとめ -Xms -Xmx -Xmn -Xss
Обычные сборщики мусора
Сборщик ParNew
-XX:ParallelGCThreads Ограничивает количество потоков сборки мусора
Сборщик Parallel Scavenge
Максимальное время паузы сборки мусора -XX:MaxGCPauseMillis Размер пропускной способности -XX:GCTimeRatio
Снижение максимального времени паузы сборки мусора происходит за счёт пропускной способности и пространства нового поколения, напрямую приводя к более частой сборке мусора
Операция для новичков: -XX:UseAdaptiveSizePolicy Стратегия адаптивной регулировки GC
Сборщик CMS
Сборщик, нацеленный на получение кратчайшего времени паузы восстановления, реализованный на основе “маркировка-очистка”. Основное преимущество: параллельная сборка, низкая пауза
- Случай мониторинга Alibaba Cloud
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/acs/user/monitoragent/jre/bin/java -server
-Xmx128m
-Xms128m
-Xmn70m
-XX:SurvivorRatio=10
-XX:PermSize=25m
-XX:MaxPermSize=30m
-XX:+DisableExplicitGC
-XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:+UseCMSCompactAtFullCollection
-XX:+CMSClassUnloadingEnabled
-XX:LargePageSizeInBytes=128m
-XX:+UseFastAccessorMethods
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=70
-XX:+UseParNewGC
-verbose:gc
-Xloggc:/acs/monitor/system/monitoragent/logs/gc.log
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Duser.timezone=GMT+8
-Djava.endorsed.dirs=
-classpath /acs/user/monitoragent/lib:/acs/user/monitoragent/lib/aliyun-openservices-sls-v0.3-inner-0.1.0.jar:/acs/user/monitoragent/lib/aliyun-openservices-with-mqs.1.0.12.jar:/acs/user/monitoragent/lib/commons-beanutils-1.8.3.jar:/acs/user/monitoragent/lib/commons-codec-1.4.jar:/acs/user/monitoragent/lib/commons-collections-3.2.1.jar:/acs/user/monitoragent/lib/commons-digester-1.8.jar:/acs/user/monitoragent/lib/commons-httpclient-3.1.jar:/acs/user/monitoragent/lib/commons-lang-2.6.jar:/acs/user/monitoragent/lib/commons-lang3-3.1.jar:/acs/user/monitoragent/lib/commons-logging-1.0.4.jar:/acs/user/monitoragent/lib/commons-validator-1.4.0.jar:/acs/user/monitoragent/lib/diamond-client-3.6.7.jar:/acs/user/monitoragent/lib/diamond-utils-3.1.3.jar:/acs/user/monitoragent/lib/ezmorph-1.0.6.jar:/acs/user/monitoragent/lib/fastjson-1.2.41.jar:/acs/user/monitoragent/lib/hamcrest-core-1.1.jar:/acs/user/monitoragent/lib/httpclient-4.2.1.jar:/acs/user/monitoragent/lib/httpcore-4.2.1.jar:/acs/user/monitoragent/lib/jackson-core-lgpl-1.9.6.jar:/acs/user/monitoragent/lib/jackson-mapper-lgpl-1.9.6.jar:/acs/user/monitoragent/lib/jdom-1.1.jar:/acs/user/monitoragent/lib/json-lib-2.4-jdk15.jar:/acs/user/monitoragent/lib/junit-4.10.jar:/acs/user/monitoragent/lib/log4j-1.2.17.jar:/acs/user/monitoragent/lib/mysql-connector-java-5.1.25.jar:/acs/user/monitoragent/lib/netty-all-4.0.36.Final.jar:/acs/user/monitoragent/lib/nginx.agent.jar:/acs/user/monitoragent/lib/ons-api-1.1.5.jar:/acs/user/monitoragent/lib/ons-client-1.1.5.jar:/acs/user/monitoragent/lib/protobuf-java-2.4.1.jar:/acs/user/monitoragent/lib/rocketmq-client-3.6.4.jar:/acs/user/monitoragent/lib/rocketmq-common-3.6.4.jar:/acs/user/monitoragent/lib/rocketmq-remoting-3.6.4.jar:/acs/user/monitoragent/lib/slf4j-api-1.7.5.jar:/acs/user/monitoragent/lib/slf4j-log4j12-1.7.5.jar:/acs/user/monitoragent/lib/test.junit-4.8.1.jar:/acs/user/monitoragent/lib/test.junit.hamcrest-1.1.jar: -Dagent.home=/acs/user/monitoragent com.alibaba.ace.nginx.agent.Startup /acs/user/monitoragent/conf
Сборщик G1
https://t.hao0.me/jvm/2017/01/15/jvm-g1.html
ConcMarkSweepGC
Рекомендуемый параметр — -Xmn, потому что этот параметр очень лаконичен, эквивалентен одноразовой установке NewSize и MaxNewSize, и оба равны. -Xmn в сочетании с -Xms начальным размером кучи и -Xmx максимальным размером кучи точно определяет расположение памяти кучи (дизайнер, вероятно, также создал три сокращённых параметра для простоты). Кроме того, официальные документы, кажется, говорят, что -Xmn начал поддерживаться в 1.4, но в наши дни не должно быть никого, кто всё ещё использует JRE до 1.4, верно?
- Пример использования
1
2
3
4
5
6
7
8
9
10
java -jar
-Xms10g
-Xmx15g
-XX:+UseConcMarkSweepGC
-XX:NewSize=6g
-XX:MaxNewSize=6g
-verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:./log/gc.log Slaver.jar
Инструменты анализа JVM
jstat
Преимущество jstat в том, что он встроен в JVM, прост и прямолинеен в использовании
1
2
3
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
pid=1
jstat -gc $pid 3000 3000
1
2
3
4
5
6
7
8
9
10
11
12
–class Мониторинг загрузки, выгрузки классов, общего пространства и времени, затраченного на загрузку классов
–gc Мониторинг состояния кучи Java, включая область Eden, 2 области Survivor, старое поколение, постоянное поколение и т.д.
–gccapacity Содержимое мониторинга в основном такое же, как -gc, но вывод в основном фокусируется на максимальном и минимальном пространстве, используемом в каждой области кучи Java
–gcutil Содержимое мониторинга в основном такое же, как -gc, но вывод в основном фокусируется на проценте используемого пространства к общему пространству
–gccause Та же функция, что и -gcutil, но будет дополнительно выводить причину последнего GC
–gcnew Мониторинг статуса GC нового поколения
–gcnewcapacity Содержимое мониторинга в основном такое же, как -gcnew, вывод в основном фокусируется на максимальном и минимальном используемом пространстве
–gcold Мониторинг статуса GC старого поколения
–gcoldcapacity Содержимое мониторинга в основном такое же, как ——gcold, вывод в основном фокусируется на максимальном и минимальном используемом пространстве
–gcpermcapacity Вывод максимального и минимального пространства, используемого в постоянном поколении
–compiler Вывод методов, скомпилированных JIT-компилятором, затраченного времени и т.д.
–printcompilation Вывод методов, которые были скомпилированы JIT
- jstat –class
: Отображение количества загруженных классов, занимаемого пространства и т.д. 1 2 3 4 5
Loaded Количество загруженных классов Bytes Байты, занимаемые загруженными классами Unloaded Количество выгруженных классов Bytes Байты выгруженных классов Time Время, затраченное на загрузку и выгрузку классов
- jstat -compiler
Отображение количества компиляций VM в реальном времени и т.д. 1 2 3 4 5 6
Compiled Количество выполненных задач компиляции Failed Количество неудачных выполнений задач компиляции Invalid Количество недействительных выполнений задач компиляции Time Время, затраченное на задачи компиляции FailedType Тип последней неудачной задачи компиляции FailedMethod Класс и метод, где находится последняя неудачная задача компиляции
- jstat -gc
: Может отображать информацию о GC, просматривать количество и время GC. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
S0C Ёмкость первого выжившего (область выживания) в молодом поколении (байты) S1C Ёмкость второго выжившего (область выживания) в молодом поколении (байты) S0U В настоящее время используемое пространство первого выжившего (область выживания) в молодом поколении (байты) S1U В настоящее время используемое пространство второго выжившего (область выживания) в молодом поколении (байты) EC Ёмкость Eden (Эдемский сад) в молодом поколении (байты) EU В настоящее время используемое пространство Eden (Эдемский сад) в молодом поколении (байты) OC Ёмкость старого поколения (байты) OU В настоящее время используемое пространство старого поколения (байты) PC Ёмкость Perm (постоянное поколение) (байты) PU В настоящее время используемое пространство Perm (постоянное поколение) (байты) YGC Количество GC в молодом поколении от запуска приложения до выборки YGCT Время, затраченное на GC в молодом поколении от запуска приложения до выборки (с) FGC Количество GC в старом поколении (полный GC) от запуска приложения до выборки FGCT Время, затраченное на GC в старом поколении (полный GC) от запуска приложения до выборки (с) GCT Общее время, затраченное на GC от запуска приложения до выборки (с)
- jstat -gccapacity
: Может отображать использование и занимаемый размер объектов трёх поколений (young, old, perm) в памяти VM 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
NGCMN Инициализированный (минимальный) размер в молодом поколении (young) (байты) NGCMX Максимальная ёмкость молодого поколения (young) (байты) NGC Текущая ёмкость молодого поколения (young) (байты) S0C Ёмкость первого выжившего (область выживания) в молодом поколении (байты) S1C Ёмкость второго выжившего (область выживания) в молодом поколении (байты) EC Ёмкость Eden (Эдемский сад) в молодом поколении (байты) OGCMN Инициализированный (минимальный) размер в старом поколении (байты) OGCMX Максимальная ёмкость старого поколения (байты) OGC Текущая вновь сгенерированная ёмкость старого поколения (байты) OC Ёмкость старого поколения (байты) PGCMN Инициализированный (минимальный) размер в поколении perm (байты) PGCMX Максимальная ёмкость поколения perm (байты) PGC Текущая вновь сгенерированная ёмкость поколения perm (байты) PC Ёмкость Perm (постоянное поколение) (байты) YGC Количество GC в молодом поколении от запуска приложения до выборки FGC Количество GC в старом поколении (полный GC) от запуска приложения до выборки
- jstat -gcutil
: Статистика информации о GC 1 2 3 4 5 6 7 8 9 10
S0 Процент используемого пространства первого выжившего (область выживания) в молодом поколении к текущей ёмкости S1 Процент используемого пространства второго выжившего (область выживания) в молодом поколении к текущей ёмкости E Процент используемого пространства Eden (Эдемский сад) в молодом поколении к текущей ёмкости O Процент используемого пространства старого поколения к текущей ёмкости P Процент используемого пространства поколения perm к текущей ёмкости YGC Количество GC в молодом поколении от запуска приложения до выборки YGCT Время, затраченное на GC в молодом поколении от запуска приложения до выборки (с) FGC Количество GC в старом поколении (полный GC) от запуска приложения до выборки FGCT Время, затраченное на GC в старом поколении (полный GC) от запуска приложения до выборки (с) GCT Общее время, затраченное на GC от запуска приложения до выборки (с)
- jstat -gcnew
: Информация об объектах молодого поколения.
1
2
3
4
5
6
7
8
9
10
S0C Ёмкость первого выжившего (область выживания) в молодом поколении (байты)
S1C Ёмкость второго выжившего (область выживания) в молодом поколении (байты)
S0U В настоящее время используемое пространство первого выжившего (область выживания) в молодом поколении (байты)
S1U В настоящее время используемое пространство второго выжившего (область выживания) в молодом поколении (байты)
TT Лимит количества удержаний
MTT Максимальный лимит количества удержаний
EC Ёмкость Eden (Эдемский сад) в молодом поколении (байты)
EU В настоящее время используемое пространство Eden (Эдемский сад) в молодом поколении (байты)
YGC Количество GC в молодом поколении от запуска приложения до выборки
YGCT Время, затраченное на GC в молодом поколении от запуска приложения до выборки (с)
- jstat -gcnewcapacity
: Информация об объектах молодого поколения и их использовании.
1
2
3
4
5
6
7
8
9
10
11
NGCMN Инициализированный (минимальный) размер в молодом поколении (young) (байты)
NGCMX Максимальная ёмкость молодого поколения (young) (байты)
NGC Текущая ёмкость молодого поколения (young) (байты)
S0CMX Максимальная ёмкость первого выжившего (область выживания) в молодом поколении (байты)
S0C Ёмкость первого выжившего (область выживания) в молодом поколении (байты)
S1CMX Максимальная ёмкость второго выжившего (область выживания) в молодом поколении (байты)
S1C Ёмкость второго выжившего (область выживания) в молодом поколении (байты)
ECMX Максимальная ёмкость Eden (Эдемский сад) в молодом поколении (байты)
EC Ёмкость Eden (Эдемский сад) в молодом поколении (байты)
YGC Количество GC в молодом поколении от запуска приложения до выборки
FGC Количество GC в старом поколении (полный GC) от запуска приложения до выборки
- jstat -gcold
:Информация об объектах старого поколения. 1 2 3 4 5 6 7 8
PC Ёмкость Perm (постоянное поколение) (байты) PU В настоящее время используемое пространство Perm (постоянное поколение) (байты) OC Ёмкость старого поколения (байты) OU В настоящее время используемое пространство старого поколения (байты) YGC Количество GC в молодом поколении от запуска приложения до выборки FGC Количество GC в старом поколении (полный GC) от запуска приложения до выборки FGCT Время, затраченное на GC в старом поколении (полный GC) от запуска приложения до выборки (с) GCT Общее время, затраченное на GC от запуска приложения до выборки (с)
- stat -gcoldcapacity
: Информация об объектах старого поколения и их использовании. 1 2 3 4 5 6 7 8
OGCMN Инициализированный (минимальный) размер в старом поколении (байты) OGCMX Максимальная ёмкость старого поколения (байты) OGC Текущая вновь сгенерированная ёмкость старого поколения (байты) OC Ёмкость старого поколения (байты) YGC Количество GC в молодом поколении от запуска приложения до выборки FGC Количество GC в старом поколении (полный GC) от запуска приложения до выборки FGCT Время, затраченное на GC в старом поколении (полный GC) от запуска приложения до выборки (с) GCT Общее время, затраченное на GC от запуска приложения до выборки (с)
- jstat -gcpermcapacity
: Информация об объектах perm и их использовании. 1 2 3 4 5 6 7 8
PGCMN Инициализированный (минимальный) размер в поколении perm (байты) PGCMX Максимальная ёмкость поколения perm (байты) PGC Текущая вновь сгенерированная ёмкость поколения perm (байты) PC Ёмкость Perm (постоянное поколение) (байты) YGC Количество GC в молодом поколении от запуска приложения до выборки FGC Количество GC в старом поколении (полный GC) от запуска приложения до выборки FGCT Время, затраченное на GC в старом поколении (полный GC) от запуска приложения до выборки (с) GCT Общее время, затраченное на GC от запуска приложения до выборки (с)
- jstat -printcompilation
:Текущая информация о выполнении VM. 1 2 3 4
Compiled Количество задач компиляции Size Размер байт-кода, сгенерированного методами Type Тип компиляции Method Имя класса и имя метода, используемые для идентификации скомпилированных методов. Имена классов используют / в качестве разделителя пространства имён. Имя метода — это метод в данном классе. Вышеуказанный формат устанавливается опцией -XX:+PrintComplation
MemoryAnalyzer
Ссылки
- Настройка JVM: Выбор подходящего сборщика GC (Три)
- Глубокое понимание сборщика мусора Java G1
- Стать экспертом JavaGC (1)—Механизм сборки мусора Java, глубокий и простой
- Стать экспертом JavaGC (2)—Как мониторить механизм сборки мусора Java
- Стать экспертом Java GC (3)—Как оптимизировать механизм сборки мусора Java
- Стать экспертом Java GC (4)—Подробное объяснение параметра MaxClients Apache и его влияние на выполнение FullGC в Tomcat
- Серия JVM Три: Настройка и анализ параметров JVM
- Введение в типы Java GC и замена/настройка GC
- Механизм сборки мусора Java (и как уменьшить вызовы GC и повысить производительность)
- What Is Garbage Collection?
- Анализ частого GC (Allocation Failure) и слишком длительного времени young gc
- Серия JVM Три: Настройка и анализ параметров JVM
- Настройка javaGC
- Некоторые ключевые технологии Java Hotspot G1 GC
- JVM
- Настройки памяти JVM (java виртуальная машина)
- Использование java jstat
- Подробное объяснение команды jstat
- Подробное объяснение использования jstat (Анализ использования JVM)
- Механизм загрузки классов java
- Использование G1(Garbage First)
- Серия обучения командам Java (4): Jstat
- Руководство по анализу и обработке проблем JVM
- Резюме настройки JVM -Xms -Xmx -Xmn -Xss
💬 讨论 / Discussion
对这篇文章有想法?欢迎在 GitHub 上发起讨论。
Have thoughts on this post? Start a discussion on GitHub.