最近系统出现宕机的情况,分析core文件,所有的线程都在select处。
最后怀疑是文件描述符超过了1024。但是想到Apache也是采用select的io模型。所以还是很不理解。
查看了Linux的内核源码linux-2.6.32。
static __inline__ void __FD_SET(unsigned long fd, __kernel_fd_set *fdsetp)
{
unsigned long _tmp = fd / __NFDBITS;
unsigned long _rem = fd % __NFDBITS;
fdsetp->fds_bits[_tmp] |= (1UL<<_rem);
}
#define __NFDBITS (8 * sizeof(unsigned long))
typedef struct {
unsigned long fds_bits [__FDSET_LONGS];
} __kernel_fd_set;
#define __FDSET_LONGS (__FD_SETSIZE/__NFDBITS)
#define __FD_SETSIZE 1024
起关键作用的就是红字部分。
Linux select机制与文件描述符限制
本文探讨了Linux系统中使用select模型时遇到的问题,特别是当文件描述符超过1024时导致的系统宕机现象。通过分析Linux内核源码揭示了文件描述符的管理方式及限制。
802

被折叠的 条评论
为什么被折叠?



