微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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更智能简洁。

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐