论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

C语言_linxu epoll问题

文章类别:C语言程序设计 | 发表日期:2010-3-21 12:03:33

C语言_linxu epoll问题

21视频教程网C语言编辑部3月21日整理

学生:

我测试了网络上一些epoll通用模型,访问量很少没问题。
我做了个测试客户端并发50线程,就出现too many open files 错误提示, fd 不够的问题,有没有人解决过这个问题,
不是通过修改系统文件描述符数量解决。这个应该是epoll的问题

C语言编辑部:

理论上是没有限制的,但实际上受到系统能打开的文件描述符的个数和系统设置的epoll可以检测的个数,分别在
/proc/sys/fs/file-max
/proc/sys/fs/epoll/max_user_watches


学生:

你说的情况我都设置过,我把FD开到最大数量,还是出这个问题,所以我说不要从这个方面解决问题,
一定是epoll本身的close(fd)有疏漏,我查了很多地方,该加fd的地方都加了,还是出现这个情况,
看了网上有建议,开个线程,用定时器监控所有fd,超时自动关闭,这个方法可以解决,但是我想这样
解决由几个问题,一是增加了系统的开销,另外epoll没这么弱吧

C语言编辑部:

/proc/sys/fs/epoll/max_user_watches
这个值查看过吗?
这个值就是用来显示epoll监视个数的,而不是与fd相关

epoll与文件描述符相关的错误只有两个(第一个 EMFILE与epoll相关,第二个ENFILE有系统fd相关):
EMFILE:
The per-user limit on the number of epoll instances imposed by /proc/sys/fs/epoll/max_user_instances was encountered.  (有的系统是/proc/sys/fs/epoll/max_user_watches)

ENFILE:
The system limit on the total number of open files has been reach
如果你的程序返回的错误是Too many open files那么就是发生了错误值为EMFILE的错误。
用下面的程序测试一下,就可以确定EMFILE错误的信息就是Too many open files。
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
extern int errno;
int main(void)
{
        errno = EMFILE;
        perror("error is");
        return 0;
}

如果改完那个文件的值后还不行,可以重启一下网络服务
如果不是/proc/sys/fs/epoll/max_user_watches的问题那么很可能是资源限制造成的,限制了每一个进程打开的fd数,他也会返回EMFILE的错误。
#include <unistd.h>
#include <stdio.h>
#include <sys/resource.h>
int main(void)
{
        struct rlimit rlim;
        getrlimit( RLIMIT_NOFILE , &rlim);
        printf( "MFDS is %ld\nCFDS is %ld\n" , rlim.rlim_max , rlim.rlim_cur);
        return 0;
}
运行这个程序查询一下你的系统对进程资源的限制,如果是这个原因可以调用setrlimit修改RLIMIT_NOFILE,把这个数改大,该操作需要root用户权限

C语言编辑部结

上一篇:{实例}C语言_顺序表的排序问题 人气:4118
下一篇:{实例}C语言习题_冒泡排序 人气:5276
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058