求解TCP_DEFER_ACCEPT 和 somaxconn的关系?

book_JobsLee 2012-01-20 05:08:33
学习linux的网络编程写了基于epoll简单例程
基本是个echo sever的样子(返回的数据是HTTP的)

和基本的echo例程区别就是 accept后不是立即处理 而是加到了一个queue里,然后统一处理。

用AB做测试 ab -n 10000 -c 100 http://127.0.0.1:8080/ 都工作正常,速度也不错

当把并发数增大后,在最后会卡住,卡在recv上(为了调试改成阻塞模式过,第一次处理就直接阻塞,用epoll的话就是EAGAIN一次,加进poll就再也wait不到,一直等能等到RDHUP)

这段程序设置了 TCP_DEFER_ACCEPT 为 1 ,不设置就不会卡住。
同时发现 和 somaxconn有关联性,加大somaxconn也不会卡住。
大概的比例是 能支持的并发数 = somaxconn * 2

用的 ubuntu 11.1 (3.0.0-14的内核)
...全文
385 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2012-01-21
  • 打赏
  • 举报
回复
并发大了为什么会卡住?

23,118

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧