https://segmentfault.com/a/1190000040089118
https://segmentfault.com/a/1190000040089118
通过每秒发起的请求对内存的占用进行计算
我们在项目开发中,一般首先需要在项目上线前对项目的JVM内存大小需要进行设置。所以我们一般的思路是:线上业务系统流程梳理->每天的数据访问量->高峰期的QPS->根据QPS计算出计算机机器配置(1、需要多少台机器 2、每台机器的内存多大 3、每台机器的JVM参数设置)->系统扩充10-20倍数预估(一般我们的系统都会比预估的大10-20倍);
其中每台机器的JVM内存参数设置是关键:需要我们根据并发、每一次请求的数据大小、以及每一次请求的处理时长来计算机器每次会进入多大数据量到Java堆内存的新生代触发Minor GC/Young GC。
目前根据所在项目的业务背景做一个大概的业务流程整理,然后根据机器的配置分析设置JVM的内存参数。
首先是核心业务流程简化、抽象以及梳理。目前项目上是做智能外呼系统,核心流程就是第三方系统/应用系统前端导入数据入库,然后会创建相应的任务规则,外呼平台根据相应的任务规则进行呼叫,由于呼叫规则比较复杂,外呼平台发起呼叫的时候,需要调用应用系统核心两个接口:
1、外呼重呼轮呼接口:主要是针对1人多号码情况下,针对于未接通或者接通的号码做是否需要重新呼叫这个号码,如果不在重呼,是否需要发起轮呼。 2、号码防火墙接口:此接口主要是平台发起呼叫时候的号码校验,一个号码是否在白名单、黑名单、以及每天是否呼叫限制,以及一些号码变换(根据业务号码获取真实号码,被叫号码解密)
然后平台呼叫完毕之后,会将呼叫结果入库存储,然后应用系统的定时调度会每次查询出100条数据接口返回给第三方系统。简化的业务流程图如下:
系统呼叫结果量高峰期大概20万,号码接通率平均50%,未呼通的号码平均呼叫3次,一个可能多个号码,我们按照1人一号码算,呼叫结果传输根据我们三方系统的个数,有不同的定时传送任务。目前对接的三方系统有4个。所以我们预估每天的进入智能外呼系统的数据量有:
总数据量=20万(外呼平台-号码防火墙接口)+10万(接入数据)+15万(重呼轮呼接口)+20万(结果回传)+5万(其他)=70万,每天呼叫时间大概为8个小时;由于外呼系统呼叫是自动后台触发,不存在80%的数据量在20%的时间涌入。所以QPS为:700000/8/60/60=25;
每秒有多少次请求 每秒25个请求