接口背景假设:
接口条件:支持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基本就不能再优化,需要通过加机器的方式来提高并发。