现象
线上公开课系统,由于疫情原因,访问暴增。系统优化以后,读请求,单机请求qps=1500左右。但是在线上业务繁忙时间段,请求会有规律的2-3分钟就会出现一批请求超时。压测中,如果请求保持一段时间,也是可以重现这个现象的。
分析工具
arthas,MAT
使用arthas的jvm命令,可以看到2-3分钟就会有出现full Gc的情况,然后结合MAT的内存分析工具,可以看到大量的对象,集中在一个读请求的对象。访问最多的接口的返回值对象。
判断
请求过多导致jvm 垃圾回收 full gc,从而引起jvm暂停,请求积压,从而超时
解决方法
1.调整jvm的内存的配比,从原来的默认年轻代 比 老年代的 1:2,调整为2:1,提升年轻代的空间;G1垃圾回收器,控制垃圾回收的时间。
2.调整接口返回值对象的大小,尽量返回code码,避免文字过大的内容,前端来处理映射。
对前3页课程信息内容的简介等描述信息,作为本地缓存,不产生多余重复性的大字段。