【JVM】JVM调参案例总结

详细文章:https://apppukyptrl1086.pc.xiaoe-tech.com/p/t_pc/course_pc_detail/image_text/i_5d11119d828ef_7ekEvPCs?product_id=p_5d0ef9900e896_MyDfcJi8&content_app_id=&type=6

一:总体思路

1.尽量避免fullgc,尽可能减少gc停顿时间
2.调参一般是控制内存分配+gc垃圾收集器类型+一些奇怪的参数。(压缩+并发)
3.压测后观察进入eden区的大小,多少一次younggc?有没有fullgc?
4.可以用jstat观察jvm在堆整体内存分布动态变化。
5.提前预估好有多少qps,每秒生成多少对象,多少对象进入eden区?
6.有线上监控,例如使用Zabbix,Open-Falcon等

Jvm调参的变量:新生代、老年代内存分配
目的:尽可能让gc次数少/停顿时间短,避免fullgc
假设每秒钟请求,生成了60MB的对象。(QPS*预估一次请求产生的对象大小)

二:进入老年代的条件

1.年龄>15
2.一次性生成了过多的对象,大于survior区

三:FullGC条件/优化方式

1.survior区进入老年代不够了,或者计算平均进入老年代的大小 > 老年代剩余空间。先fullgc,后younggc(QPS过大+内存分配不合理)
2.内存泄漏,对象一直保持着引用无法被释放(代码BUG)
3,永久代占用内存多,或者有system.gc

优化方式:
第一种增加survivor区
第二种可以用dump命令,然后用jvm分析工具进行分析,看到底哪个对象占用内存空间过大。
第三种是解析发现老年代并没有占用过多内存,那就是永久代或者代码使用了system.gc

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值