监控IVM -性能调优 通过-Xms -Xmx限定其最小、最大值

1.  Q:为什么Full GC的次数越来越多?

 A:因此内存的积累,逐渐耗尽了年老代的内存,导致新对象分配没有更多的空间,从而导致频繁的垃圾回收

2 .Q:为什么年老代占用的内存越来越大?

   A:因为年轻代的内存无法被回收,越来越多地被Copy到年老代

3. Q:为什么崩溃前垃圾回收的时间越来越长?

A:根据内存模型和垃圾回收算法,垃圾回收分两部分:内存标记、清除(复制),
标记部分只要内存大小固定时间是不变的,变的是复制部分,


因为每次垃圾回收都有一些回收不掉的内存,所以增加了复制量,
导致时间延长。所以,垃圾回收的时间也可以作为判断内存泄漏的依据

通过-Xms -Xmx限定其最小、最大值(JVM性能调优 - 每天进步一点点! - ITeye博客

为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间,我们通常把最大、最小设置为相同的值
请看一下一个时间的Java参数配置:(服务器:Linux 64Bit,8Core×16G)

 

 JAVA_OPTS="$JAVA_OPTS -server -Xms3G -Xmx3G -Xss256k -XX:PermSize=128m -XX:MaxPermSize=128m -XX:+UseParallelOldGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/aaa/dump -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/usr/aaa/dump/heap_trace.txt -XX:NewSize=1G -XX:MaxNewSize=1G"

经过观察该配置非常稳定,每次普通GC的时间在10ms左右,Full GC基本不发生,或隔很长很长的时间才发生一次

 JVM监控

    • JVM堆内存监控
    • GC次数和耗时
    • JVM线程数监控

 Tomcat监控选型及实践 - 知乎 (zhihu.com)

用一个例子来演示会更加清晰
原文地址:https://www.cnblogs.com/hixiaowei/p/15257585.html