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 @   诸葛萧晁  阅读(151)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示