c - 在 Linux 上用 C 语言处理超过 1024 个文件描述符

标签 c linux multithreading networking

我在使用 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/

相关文章:

python - Threading Condition Acquire lock 并不是真正获取锁

Java:线程间变量的同步

java - 为什么我的线程程序只使用一个 CPU?

c++ - GHashTable 的大小/调整大小

linux - 几秒钟后终止作业并处理循环中的下一步

linux - 什么是报价命令?

linux - Linux Bash脚本附录

c - 自然对数的值

c - EOF 练习 1-6 K&R C 编程语言

c - 我传递指针参数的方式有什么问题吗?