012、JVM实战总结:案例实战:每日百万交易的支付系统,JVM栈内存与永久代大小又该如何设置?

更详细内容请扫描上方的二维码

1、前文回顾

如何根据对未来预估的业务量和访问量去推算每秒的并发量、内存空间占用等,进而推算出内存运转模型,然后选择合理的机器配置,配置合理的内存大小

2、基于案例,说说不合理设置内存的反面示例

1台2核4G,线上JVM堆内存只有1G,扣除老年代之后,新生代其实就几百MB。高峰期每秒大概100笔支付交易,50kb/100订单.秒,扩大20倍 1MB/秒

3、大促期间,瞬时访问量增加十倍

每秒钟上千笔订单,不光是内存,尤其是线程资源、CPU资源,都会几乎打满

4、少数请求需要几十秒处理,导致老年代内存占用变大

每秒过来的1000笔交易,不再是1秒就可以处理完毕了,压力骤增,会导致你的系统性能下降,处理时间变长,minorgc频繁,系统卡顿、很多对象进入老年代

5、老年代对象越来越多导致频繁垃圾回收

老年代很快也会满,导致MajorGC频繁。本身MajorGC就慢,系统会严重卡顿

6、反面案例总结

突发的流量压力,突发的性能抖动,导致很多对象长期在新生代被人引用,无法回收,最后持续进入老年代,触发老年代内存频繁占满,老年代频繁被垃圾回收

7、如何合理设置永久代大小?

设置个几百MB大体上都是够用

8、如何合理设置栈内存大小

一般默认就是比如512KB到1MB,就差不多够了

你可能感兴趣的:(jvm实战高手,JVM实战高手)