我在使用 epoll(边缘触发)和线程的线程网络服务器上工作,我正在使用 httperf 对我的服务器进行基准测试。
到目前为止,它的表现非常好,或者说几乎完全符合发送请求的速度。直到 1024 障碍,一切都减慢到大约 30 个请求/秒。
在 Ubuntu 9.04 64 位上运行。
我已经试过了:
- 成功地增加了文件描述符的 ulimit 数量。它只是不会提高 1024 个并发连接以上的性能。
andri@filefridge:~/Dropbox/School/Group 452/Code/server$ ulimit -n
20000
我很确定这种减速发生在操作系统中,因为它发生在事件发送到 epoll 之前(是的,我还增加了 epoll 的限制)。
我需要对我的程序可以处理的并发连接数进行基准测试,直到它开始变慢(没有操作系统干扰)。
如何让我的程序运行超过 1024 个文件描述符?
这个限制可能是有原因的,但出于基准测试的目的,我需要它消失。
更新
感谢您的所有回答,但我想我已经找到了罪魁祸首。在我的程序中重新定义 __FD_SETSIZE 后,一切开始变得更快。当然 ulimit 也需要提高,但如果没有 __FD_SETSIZE,我的程序永远不会利用它。
最佳答案
感谢您的所有回答,但我想我已经找到了罪魁祸首。在我的程序中重新定义 __FD_SETSIZE 后,一切开始变得更快。当然 ulimit 也需要提高,但如果没有 __FD_SETSIZE,我的程序永远不会利用它。
关于c - 在 Linux 上用 C 语言处理超过 1024 个文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/848717/