我正在使用epoll(边缘触发)和线程的线程网络服务器,我正在使用httperf来对我的服务器进行基准测试。
到目前为止,它的表现非常好或几乎完全符合请求的发送速度。直到1024障碍,一切都减慢到大约30个请求/秒。
在64位Ubuntu 9.04上运行。
我已经尝试过了:
andri @ filefridge:〜/ Dropbox / School / Group 452 / Code / server $ ulimit -n
20000
我很确定在事件发送到epoll之前发生在操作系统中的这种减速(是的,我也增加了epoll的限制)。
我需要对程序可以处理的并发连接数进行基准测试,直到它开始变慢(没有操作系统干扰)。
如何让我的程序运行超过1024个文件描述符?
这个限制可能是有原因的,但出于基准测试的目的,我需要它。
感谢您的所有答案,但我认为我找到了罪魁祸首。在我的程序中重新定义__FD_SETSIZE后,一切开始变得更快。当然ulimit也需要提升,但没有__FD_SETSIZE,我的程序从不利用它。
答案 0 :(得分:6)
感谢您的所有答案,但我认为我找到了罪魁祸首。在我的程序中重新定义__FD_SETSIZE后,一切开始变得更快。当然ulimit也需要提升,但没有__FD_SETSIZE,我的程序从不利用它。
答案 1 :(得分:4)
请参阅the C10K problem页面。它包含有关如何实现“10000个并发连接”目标的深入讨论,同时保持高性能并管理为每个客户提供服务。
它还包含有关在一次处理大量连接时如何提高内核性能的信息。
答案 2 :(得分:-5)
请不要。
是的,我的意思是。
如果您需要增加文件描述符,则代码中存在隐藏的错误。追捕它而不是治疗它的症状。记得在完成后关闭文件描述符。