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性能的影响。

相关推荐
OxyTheCrack4 分钟前
【C++】简述main函数中的argc与argv
开发语言·c++
weixin_704266059 分钟前
Spring整合MyBatis(一)
java·spring·mybatis
翘着二郎腿的程序猿10 分钟前
Maven本地化部署与使用全指南
java·maven
历程里程碑11 分钟前
Linux 49 HTTP请求与响应实战解析 带http模拟实现源码--万字长文解析
java·开发语言·网络·c++·网络协议·http·排序算法
ZVAyIVqt0UFji12 分钟前
高可用虚拟IP(HaVip)技术详解:原理、设计与应用
开发语言·网络·网络协议·tcp/ip·perl
飞Link13 分钟前
深度解析 TS2Vec:时序表示学习中的层次化建模(Hierarchical Contrastive Learning)
开发语言·python·学习·数据挖掘
IronMurphy14 分钟前
【算法二十】 114. 寻找两个正序数组的中位数 153. 寻找旋转排序数组中的最小值
java·算法·leetcode
爱炸薯条的小朋友16 分钟前
C#依赖注入和仿写Prism注入
开发语言·c#
代码探秘者17 分钟前
【Java集合】ArrayList :底层原理、数组互转与扩容计算
java·开发语言·jvm·数据库·后端·python·算法
寻见90317 分钟前
10 分钟吃透 MyBatis 核心|从底层原理到实战技巧,Java 开发者必藏(无废话干货)
java·mysql·mybatis