JAVA jvm 调优经历简单记录

现象

jdk1.8下 java进程启动 

内存会随着运行 并发不断缓慢增加, 但不会释放下来。

第一阶段,认为有些对象没有造成内存溢出,开始各种分析。

之间使用一些工具命令,常用记录下来

一顿操作猛如虎,结果发现还是没有太大问题,顶多jetty 一些对象生命周期较长WebSocketSession  MappedByteBufferPool 

阿里软件工具 arthas java -jar arthas-boot.jar    https://arthas.aliyun.com/doc
java
jmap -histo pid>histoxxx.txt  输出文本pid所有对象内存打下
    jmap -heap pid  
    jmap -dump:format=b,file=dump.hprof <pid>   

jstat -gcutil pid 总结垃圾回收统计

pmap -x 13367 | sort -n -k3   

开启jvm
    port=$1   
    port2=$((10#${port}-1000))
    -Dcom.sun.management.jmxremote 
    -Dcom.sun.management.jmxremote.port=$port2 
    -Dcom.sun.management.jmxremote.ssl=false 
    -Dcom.sun.management.jmxremote.authenticate=false
    -Djava.rmi.server.hostname=x.x.x.x

第二阶段  开始调优jvm,目标能够及时回收一些内存

设置一些 最大 最小 内存后 发现内存可以回收了,但是每次都是一段时间后通过FGC 来回收的,瞬间尴尬了。

开始更高端的jvm设置,.....

蓦然回首...

jdk8默认使用 并行收集器组合 Parallel Scavenge + Parallel Old  

为什么不用G1呢

https://blog.csdn.net/coderlius/article/details/79272773可以看些回收机制概念

第三阶段,使用G1

G1回收器的常见操作步骤
G1的设计原则就是简化JVM性能调优,开发人员只需要简单的三步即可完成调优:
第一步: 开启G1垃圾收集器
第二步: 设置堆的最大内存
第三步: 设置最大的停顿时间
G1中提供了三种垃圾回收模式: YoungGC、Mixed GC和Full GC,在不同的条件下被触发。

 

一段时间观察  jstat -gcutil xx

FGC没有,内存也能下来了。  总结,一些第三方工具使用后,某些对象生命周期不定,

大并发下gc不一定能下来,新 旧区设置调优需要达到平衡。使用G1更智能简洁。

 

 

 

 

posted @ 2021-12-25 03:27  诸葛萧晁  阅读(146)  评论(0编辑  收藏  举报