1000qps的JVM内存设置多大的内存

接口背景假设:

接口条件:支持1000QPS
接口响应:100ms
接口返回报文: 10kb

一、计算 1000qps所需要的内存
那么1000qps的请求需求的内存:1000*10kb=10000kb=9.8M
也就是说每秒需要9.8M的内存。

二、计算多久触发一次ygc
说明:ygc即堆的年轻代进行GC回收,触发条件为:eden、from幸存区内存满了或者不够了就会触发。一般要求ygc达到分钟级别(即最多一分钟执行一次young  gc)

1、计算1000qps每分钟所需的新生代内存:60*9.8M=588M
      注:新生代内存与老年代内存的比例:1:2  (注:堆内存 = 新生代内存 + 老年代内存)
2、计算所需要堆的大小:588M * 3  = 1764M = 1.764G
3、那么堆内存设置2G就够了。

三、需要多少个节点实例
根据刚才计算的堆内存设置2G,单节点即可满足1000qps了。

如为了高可用可以部署2个节点,每个节点承担500qps即可。

四、计算最大支持并发数
springcloud springboot的线程数取决于tomcat的线程数,tomcat的默认线程数为200
1、计算单个线程处理的qps:1000ms/100ms=10个   (注:单线程处理单次响应时间为100ms,那计算1秒可处理的次数就是单线程的qps了 )
2、计算200线程处理的qps:   10个*200线程=2000qps

3、2000qps每秒需要的内存:2000qps*10kb=20000kb=20M左右
      注:2G的堆内存 ,新生代大概600M
4、计算2000qps的ygc时间: 600M/20M=30秒
     注:30秒ygc可以接受
5、所以最大支持并发数:2000qps

注:本场景,超过2000qps基本就不能再优化,需要通过加机器的方式来提高并发。


 

你可能感兴趣的:(jdk,java,jvm)