Welcome 微信登录

首页 / 操作系统 / Linux / Linux---进程句柄限制总结

受网上很多帖子影响,一直认为Unix、Linux下单个进程打开句柄数目上限是65535,不能超过这个值,最近从网上看到另一种描述,在SUSE、RedHat都测试了一下,单个进程完全可以支持到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_SETSIZELinux环境一个C语言的宏定义,在/usr/include/bits/typesize.h或有定义,默认值1024,到目前为止,我只确认该宏定义限制FD_SET()、FD_CLR()操作的文件描述符值,猜测应该是Linux早期版本遗留下来的一个限制。既然select()操作已经淘汰了,这个宏定义应该也没用了。如果要使用select()系列操作,可以在gcc编译时定义该宏“-DFD_SETSIZE=65535”。手工修改操作系统句柄,请按照下表修改配置:
操作系统查看句柄数方法修改句柄数方法
Linuxulimit -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
HPkctune -q maxfiles ---查看句柄数软限制kctune -q maxfiles_lim---查看句柄数硬限制执行命令修改:kctune maxfiles>=XXXXXX范围【32,maxfiles_lim】,maxfiles_lim的取值范围【32,1048576】,但是大于65535时,某些老版本的文件函数不兼容。maxfiles修改后,必须重启操作系统生效。
Aixulimit -Sn    ---查看句柄数软限制ulimit -Hn    ---查看句柄数硬限制检查/etc/security/limits文件,增加修改如下配置:nofiles = -1nofiles_hard=-1在AIX6测试验证:即使配置为ulimited,单个进程只能打开65535个句柄。
Solarisulimit -Sn    ---查看句柄数软限制ulimit -Hn    ---查看句柄数硬限制检查/etc/system文件,增加修改如下配置:rlim_fd_max=65535rlim_fd_cur=65535修改后,需要重启机器生效。
本文永久更新链接地址