我有一个运行CentOS的相对较新的8核盒子。我想开发一个使用TCP的统计服务器。这非常简单,它接受TCP连接,增加计数器并关闭连接。问题是它至少需要每秒执行至少10k次请求。我怀疑CPU /内存不会有问题,但是我更担心人为限制(例如半开连接),我可能需要在服务器上对其进行配置以允许这种数量的存储量。那么,这可能吗?我应该注意哪些设置?我的NIC无法处理吗?
我有一个运行CentOS的相对较新的8核盒子。我想开发一个使用TCP的统计服务器。这非常简单,它接受TCP连接,增加计数器并关闭连接。问题是它至少需要每秒执行至少10k次请求。我怀疑CPU /内存不会有问题,但是我更担心人为限制(例如半开连接),我可能需要在服务器上对其进行配置以允许这种数量的存储量。那么,这可能吗?我应该注意哪些设置?我的NIC无法处理吗?
Answers:
您应该能够做到[尽管这可能不是个好主意]。
在树脂 appserv上,我可以在2.6GHz的四核至强处理器上获得〜5k req / sec。请求调用简单的servlet,该servlet从mysql读取1行并发送很小的xml响应。
测试完成
ab -n 10000 -c 16 http://some/url/
检测结果:
Concurrency Level: 16
Time taken for tests: 1.904 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 3190000 bytes
HTML transferred: 1850000 bytes
Requests per second: 5252.96 [#/sec] (mean)
Time per request: 3.046 [ms] (mean)
Time per request: 0.190 [ms] (mean, across all concurrent requests)
Transfer rate: 1636.42 [Kbytes/sec] received
但是我认为使用简单的c程序会更好,当然不用为每个请求生成新线程。Greg Hewgill的链接应该给您一个很好的主意。
即使在长时间的测试中,我也没有任何连接问题[提到半开式插座];该测试在通过千兆以太网连接的两个linux盒之间运行[尽管您看到带宽不是瓶颈]。
您可能对我在负载测试Apache时达到的Linux内核限制感兴趣。就我而言,内核产生了一些有用的错误消息,因此我的建议是编写程序,如果您似乎快要达到极限,请注意内核日志。
如果可能,我会使用UDP而不是TCP。它应该更轻巧,因此扩展性更好。