【发布时间】:2012-05-21 22:22:50
【问题描述】:
我正在尝试在 ubuntu 64 上的 ec2 c1.xlarge 机器上加载测试一个简单的 node.js 和 cyclone hello world 应用程序。它有 8 个内核。我使用 nginx 作为负载均衡器,主管为每个核心启动一个进程。当我在机器上运行以下命令时,node.js 的 qps 约为 6500。
ab -n 5000 -c 25 http://127.0.0.1
当我从远程机器运行 ab 时,即使是在同一区域中的机器,qps 也会下降到大约 175 qps。如果我从我的开发机器上运行,情况会更糟。
那么,我错过了什么?是否有我必须调整的参数以允许来自远程机器的更多连接?我觉得我错过了什么。我必须调整 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
【问题讨论】:
-
难道网络真的是这里的瓶颈?
-
嗯...175 QPS 在同一归置组中的 ec2 上。这意味着彼此相邻。
-
高度优化的软件每次可以轻松处理比 100 Mbit/s 以太网互连可以传输的更多请求。您应该估计基准在 localhost 上使用了多少带宽。将此与 EC2 置放群组中节点之间的互连带宽进行比较,可以告诉我们网络是否会成为瓶颈。
-
嗯,我刚刚阅读了“在置放群组中启动的所有实例都具有低延迟,实例之间完全平分 10 Gbps 带宽”。因此,假设 Amazon 没有网络问题,那么 NIC 不太可能导致性能显着下降。
-
只是为了确定,对两个节点之间的网络本身进行基准测试。这可以通过多种方式完成。一个非常简单的方法是
dd和netcat的组合,如下所述:wiki.linuxquestions.org/wiki/Benchmark
标签: node.js nginx amazon-ec2 load-testing