我正在尝试在ubuntu 64上的ec2 c1.xlarge机器上加载测试一个简单的node.js和cyclone hello world app。它有8个核心。我使用nginx作为负载均衡器,主管为每个核心启动一个进程。当我在机器上运行以下内容时,对于node.js,我的qps约为6500。
ab -n 5000 -c 25 http://127.0.0.1
当我从远程计算机运行ab时,即使是位于同一区域的计算机,qps也会下降到大约175 qps。如果我从我的开发机器运行它会更糟糕。
那么,我错过了什么?是否有必须调整的参数以允许来自远程机器的更多连接?我觉得我错过了什么。有一个神奇的nob我必须在sysctl配置文件中调整?它是一台相当原始的机器,但在启动时,下面是我调整的nobs。
sysctl -w fs.file-max=128000;
sysctl -w net.ipv4.tcp_keepalive_time=300;
sysctl -w net.core.somaxconn=250000;
sysctl -w net.ipv4.tcp_max_syn_backlog=2500;
sysctl -w net.core.netdev_max_backlog=30000;
sysctl -p
答案 0 :(得分:3)
延迟会降低测试速度,从而降低吞吐量。实际上,在每种情况下,远程请求将比本地请求花费更长的时间,因此单个线程的远程运行吞吐量低于本地运行时的吞吐量,因此,当使用不会调整请求的Ab时,总吞吐量必须降低。
例如,您有25个主题。可以说在本地提出请求需要50ms。对于一个线程,这给出了:
1000(1秒)/ 50 =每秒每秒20个请求 - 这是一个线程可能达到的最大吞吐量。
超过25个theads,加起来为25 * 20 = 500 req / s。
如果您采用该公式并将响应时间更改为250毫秒,那么on线程的总最大吞吐量将降至4 req / s,从而为25个80个请求的线程提供总体最大值每秒。
更进一步说明:如果你说你用25个线程获得6000 qps,那么逻辑上你的应用程序在本地调用时响应大约4ms。如果你只能远程获得175 qps,那么这是因为响应时间下降到大约142毫秒,所以在你的系统中你有大约138毫秒的延迟 - 给予或接受 - 这就是问题。