求助,socket描述符最大值问题

rpg_kill 2012-06-28 04:01:28
当我的应用程序打开了1200多个socket描述符时,应用老是出现莫名其妙的内存错误,打开1000个时没有问题。所有的socket描述符都用epoll管理。

我把系统描述符打开最大值调整到102400了。
还有有时候recv 不停的报EWOULDBLOCK错误,导致epoll管理类不能工作。

当打开1000个一下时没有上述问题。请问还有其他系统参数需要调整吗?
...全文
298 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
冻结 2012-07-04
  • 打赏
  • 举报
回复
epoll 是阻塞,但是注册到epoll 的 fd 是非阻塞的。
薛定谔之死猫 2012-07-04
  • 打赏
  • 举报
回复
是的,epoll用的是阻塞,不然没法运转啊,运转过程中就会有无数据可读的错误让你重头再来啊~
qq120848369 2012-07-03
  • 打赏
  • 举报
回复
这种问题你应该仔细的追踪一下代码了, 大量EAGAIN不能说不正常, 因为这个错误就是告诉你暂时无数据可读, 你需要检查的是代码逻辑.
rpg_kill 2012-07-03
  • 打赏
  • 举报
回复
epoll都用非阻塞吧
薛定谔之死猫 2012-07-02
  • 打赏
  • 举报
回复
超出最大文件个数应用程序会直接core掉的,没机会运行,应该是应用管理存储的问题,EWOULDBLOCK是select(也就是epool方式)要有效利用的错误类型,不用这些信息那还不如直接使用阻塞模式~
qq120848369 2012-07-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:

C/C++ code

通常我们通过终端连接到linux系统后执行ulimit -n 命令可以看到本次登录的session其文件描述符的限制,如下:
$ulimit -n
1024

当然可以通过ulimit -SHn 102400 命令来修改该限制,但这个变更只对当前的session有效,当断开连接重新连接后更改就失效了。

如果想永久变更需要修……
[/Quote]


struct rlimit {
rlim_t rlim_cur; /* Soft limit */
rlim_t rlim_max; /* Hard limit (ceiling for rlim_cur) */
};

可以改一下,把cur改到max.
rpg_kill 2012-07-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

C/C++ code

通常我们通过终端连接到linux系统后执行ulimit -n 命令可以看到本次登录的session其文件描述符的限制,如下:
$ulimit -n
1024

当然可以通过ulimit -SHn 102400 命令来修改该限制,但这个变更只对当前的session有效,当断开连接重新连接后更改就失效了。

如果想永久变更需要修改/etc/security/limits.c……
[/Quote]
系统参数我已经根据一个博客上那样说的永久修改好了,在程序中还需要调用setrlimit(RLIMIT_NOFILE, &rt)吗?
youkuxiaobin 2012-06-28
  • 打赏
  • 举报
回复

通常我们通过终端连接到linux系统后执行ulimit -n 命令可以看到本次登录的session其文件描述符的限制,如下:
$ulimit -n
1024

当然可以通过ulimit -SHn 102400 命令来修改该限制,但这个变更只对当前的session有效,当断开连接重新连接后更改就失效了。

如果想永久变更需要修改/etc/security/limits.conf 文件,如下:
vi /etc/security/limits.conf
* hard nofile 102400
* soft nofile 102400


在控制台设置是没用的
可以调用这个setrlimit(RLIMIT_NOFILE, &rt)
http://blog.csdn.net/jiang1013nan/article/details/5403512

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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