jvm运行情况预估

相关系统

jvm优化原则-CSDN博客

执行下面指令

bash 复制代码
jstat gc -pid

能计算出一些关键数据,有了这些数据,先给JVM参数一些的初始的,比堆内存大小、年轻代大小 、Eden和Srivivor的比例,老年代的大小,大对象的阈值,大龄对象进行老年代的阈值等。

年轻代增长速率

执行下面指令

bash 复制代码
jstat -gc pid 1000 10

通过观察EU(eden区的使用)来估算每秒eden大概新增多少对象,如果系统负载不高,可以把频率1秒换成1分钟,10分钟也是可以的具体看业务场景。注意,一般系统可能有高峰期和日常期,所以需要在不同的时间分别估算不同情况下对象增长速率。

Young GC的触发频率和每次耗时

依据年轻代增长速率就可以以eden区的大小推算出Minor GC需要多久时间触发,young GC平均耗时可以通过YGCT/YGC公式算出,根据结果就会计算出系统大概Young GC的执行而卡顿多久。

每次Young GC有多少对象进入老年代

依据前面推算出来的结果就知道Young GC频率,假设10分钟一次,可以执行jstat -PID 600000 10,观察eden区的变化,survivor区和老年代的变化情况,每次gc后eden区使用一般会大幅减少,survivor区和老年代都有可能增长,这些增长的对象就是每次Young GC后存活的对象,同时还可以看出每次Young GC后进行老年代大概多少对象,从而可以推算出老年代对象增长速度

Full GC的触发频率和每次耗时

前面已经推算出老年代对象的增长速度,接着就能推算出Full GC的触频率,Full GC的每次耗时用公司FGCT/FGC计算出来。

优化思路

让每次Young GC后的存活的对象小于Survivor区域的50%,都留存在年轻代中,尽量别让对象进行老年代。尽量减少Full GC的频率,避免频繁Full GC对JVM性能的影响。

相关推荐
qq_529835352 分钟前
ThreadLocal内存泄漏 强引用vs弱引用
java·开发语言·jvm
景彡先生6 分钟前
C++并行计算:OpenMP与MPI全解析
开发语言·c++
落笔画忧愁e7 分钟前
扣子Coze飞书多维表插件添加数据记录
java·服务器·飞书
量子联盟2 小时前
原创-基于 PHP 和 MySQL 的证书管理系统,免费开源
开发语言·mysql·php
秋千码途2 小时前
小架构step系列08:logback.xml的配置
xml·java·logback
飞翔的佩奇3 小时前
Java项目:基于SSM框架实现的旅游协会管理系统【ssm+B/S架构+源码+数据库+毕业论文】
java·数据库·mysql·毕业设计·ssm·旅游·jsp
时来天地皆同力.3 小时前
Java面试基础:概念
java·开发语言·jvm
hackchen3 小时前
Go与JS无缝协作:Goja引擎实战之错误处理最佳实践
开发语言·javascript·golang
找不到、了3 小时前
Spring的Bean原型模式下的使用
java·spring·原型模式
阿华的代码王国4 小时前
【Android】搭配安卓环境及设备连接
android·java