一尘不染

在Linux上的C中处理1024个以上的文件描述符

linux

我正在使用epoll(边缘触发)和线程在线程网络服务器上工作,并且正在使用httperf对服务器进行基准测试。

到目前为止,它的性能确实非常好,或者几乎完全按照发送请求的速度执行。直到1024屏障为止,那里的所有内容都减慢到大约30个请求/秒。

在64位Ubuntu 9.04上运行。

我已经尝试过:

  • 成功增加文件描述符的ulimit数量。只是并不能提高1024个并发连接以上的性能。

andri @ filefridge:〜/ Dropbox /学校/ Group 452 /代码/服务器$ ulimit -n
20000

我很确定这种速度减慢正在操作系统中发生,因为它是在事件发送到epoll之前发生的(是的,我也增加了epoll的限制)。

我需要基准测试程序可以减慢多少并发连接,直到它开始变慢(不影响操作系统)。

如何使程序运行超过1024个文件描述符?

这个限制可能是有原因的,但是出于基准测试的目的,我需要将其删除。

更新资料

感谢您的所有回答,但我想我已经找到了罪魁祸首。在我的程序中重新定义__FD_SETSIZE之后,所有东西开始以更快的速度移动。当然,还需要提高ulimit,但是如果没有__FD_SETSIZE,我的程序就永远不会利用它。


阅读 274

收藏
2020-06-07

共1个答案

一尘不染

感谢您的所有回答,但我想我已经找到了罪魁祸首。在我的程序中重新定义__FD_SETSIZE之后,所有东西开始以更快的速度移动。当然,还需要提高ulimit,但是如果没有__FD_SETSIZE,我的程序就永远不会利用它。

2020-06-07