我一直在尝试使用Locust.io在EC2计算优化实例上进行API服务器的负载测试。它提供了一个易于配置的选项,用于设置连续请求等待时间和并发用户数量。理论上,rps = wait time X #_users。然而,在测试时,这个规则在非常低的#_users阈值下(在我的实验中约为1200个用户)会失效。变量hatch_rate、#_of_slaves(包括在分布式测试设置中)对rps几乎没有影响。
实验信息:
测试是在一个C3.4x AWS EC2计算节点(AMI映像)上进行的,具有16个vCPU、通用SSD和30GB RAM。在测试期间,CPU利用率峰值达到60%(取决于孵化速率-控制并发进程生成),平均保持在30%以下。
Locust.io:
设置:使用pyzmq,并将每个vCPU核心设置为从属。单个POST请求设置,请求体~20字节,响应体~25字节。请求失败率:<1%,平均响应时间为6ms。
变量:连续请求之间的时间设置为450ms(最小值:100ms,最大值:1000ms),孵化速率为每秒30个,并通过变化#_users来测量RPS。
RPS遵循预测的方程,最多可达到1000个用户。增加#_users后,收益递减,在大约1200个用户时达到峰值。在这里,#_users不是独立变量,改变wait time也会影响RPS。然而,将实验设置更改为32个核心实例(c3.8x实例)或56个核心(在分布式设置中)并不会对RPS产生影响。
那么,控制RPS的方法是什么?我是否漏掉了一些明显的东西?
实验信息:
测试是在一个C3.4x AWS EC2计算节点(AMI映像)上进行的,具有16个vCPU、通用SSD和30GB RAM。在测试期间,CPU利用率峰值达到60%(取决于孵化速率-控制并发进程生成),平均保持在30%以下。
Locust.io:
设置:使用pyzmq,并将每个vCPU核心设置为从属。单个POST请求设置,请求体~20字节,响应体~25字节。请求失败率:<1%,平均响应时间为6ms。
变量:连续请求之间的时间设置为450ms(最小值:100ms,最大值:1000ms),孵化速率为每秒30个,并通过变化#_users来测量RPS。
RPS遵循预测的方程,最多可达到1000个用户。增加#_users后,收益递减,在大约1200个用户时达到峰值。在这里,#_users不是独立变量,改变wait time也会影响RPS。然而,将实验设置更改为32个核心实例(c3.8x实例)或56个核心(在分布式设置中)并不会对RPS产生影响。
那么,控制RPS的方法是什么?我是否漏掉了一些明显的东西?