进程句柄限制总结

受网上很多帖子影响,一直认为Unix、Linux下单个进程打开句柄数目上限是65535,不能超过这个值,最近从网上看到另一种描述,在SUSERedHat都测试了一下,单个进程完全可以支持到100万以上的句柄。

关于系统文件句柄的几个限制从大往小排列:

/proc/sys/fs/nr_open

系统文件系统支持文件句柄总数上限,默认值1048576(1M),Linux2.6.25开始增加该内核参数,用于替换内核宏NR_OPEN(1048576),该值上限受限于系统内存。

在linux 2.26.32平台执行“man 5 proc”没有看到“/proc/sys/fs/nr_open”,只看到NR_OPEN参数限制/proc/sys/fs/file-max。

/proc/sys/fs/file-max

系统文件系统支持文件句柄总数最大值,必须小于/proc/sys/fs/nr_open或NR_OPEN,增加该值时,必须同步修改/proc/sys/fs/inode-max = 4*/proc/sys/fs/file-max。

ulimit -Hn

单个进程句柄数硬上限,默认值1024,不能大于/proc/sys/fs/file-max,修改方法不多讲。

ulimit -Hn

单个进程句柄数软上限,默认值1024,不能大于“ulimit -Hn”硬上限,修改方法不多讲。

FD_SETSIZE

Linux环境一个C语言的宏定义,在/usr/include/bits/typesize.h或有定义,默认值1024,到目前为止,我只确认该宏定义限制FD_SET()、FD_CLR()操作的文件描述符值,猜测应该是Linux早期版本遗留下来的一个限制。既然select()操作已经淘汰了,这个宏定义应该也没用了。如果要使用select()系列操作,可以在gcc编译时定义该宏“-DFD_SETSIZE=65535”。

手工修改操作系统句柄,请按照下表修改配置:

操作系统

 

查看句柄数方法

 

修改句柄数方法

 

Linux

 

ulimit -Sn   

---查看句柄数软限制

ulimit -Hn   

---查看句柄数硬限制

 

检查/etc/security/limits.conf文件,修改或增加如下配置:

*                hard    nofile          65536

*                soft    nofile          65535

在/etc/pam.d/su、/etc/pam.d/xdm、/etc/pam.d/login文件增加如下配置:

session  required      pam_limits.so

 

HP

 

kctune -q maxfiles

---查看句柄数软限制

kctune -q maxfiles_lim

---查看句柄数硬限制

 

执行命令修改:

kctune maxfiles>=XXX

XXX范围【32,maxfiles_lim】,maxfiles_lim的取值范围【32,1048576】,但是大于65535时,某些老版本的文件函数不兼容。

maxfiles修改后,必须重启操作系统生效。

 

Aix

 

ulimit -Sn   

---查看句柄数软限制

ulimit -Hn   

---查看句柄数硬限制

 

检查/etc/security/limits文件,增加修改如下配置:

nofiles = -1

nofiles_hard=-1

在AIX6测试验证:即使配置为ulimited,单个进程只能打开65535个句柄。

 

Solaris

 

ulimit -Sn   

---查看句柄数软限制

ulimit -Hn   

---查看句柄数硬限制

 

检查/etc/system文件,增加修改如下配置:

rlim_fd_max=65535

rlim_fd_cur=65535

修改后,需要重启机器生效。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/16458.html