受網(wǎng)上很多帖子影響,一直認(rèn)為Unix、Linux下單個(gè)進(jìn)程打開(kāi)句柄數(shù)目上限是65535,不能超過(guò)這個(gè)值,最近從網(wǎng)上看到另一種描述,在SUSE、RedHat都測(cè)試了一下,單個(gè)進(jìn)程完全可以支持到100萬(wàn)以上的句柄。
關(guān)于系統(tǒng)文件句柄的幾個(gè)限制從大往小排列:
/proc/sys/fs/nr_open
系統(tǒng)文件系統(tǒng)支持文件句柄總數(shù)上限,默認(rèn)值1048576(1M),Linux2.6.25開(kāi)始增加該內(nèi)核參數(shù),用于替換內(nèi)核宏NR_OPEN(1048576),該值上限受限于系統(tǒng)內(nèi)存。
在linux 2.26.32平臺(tái)執(zhí)行“man 5 proc”沒(méi)有看到“/proc/sys/fs/nr_open”,只看到NR_OPEN參數(shù)限制/proc/sys/fs/file-max。
/proc/sys/fs/file-max
系統(tǒng)文件系統(tǒng)支持文件句柄總數(shù)最大值,必須小于/proc/sys/fs/nr_open或NR_OPEN,增加該值時(shí),必須同步修改/proc/sys/fs/inode-max = 4*/proc/sys/fs/file-max。
ulimit -Hn
單個(gè)進(jìn)程句柄數(shù)硬上限,默認(rèn)值1024,不能大于/proc/sys/fs/file-max,修改方法不多講。
ulimit -Hn
單個(gè)進(jìn)程句柄數(shù)軟上限,默認(rèn)值1024,不能大于“ulimit -Hn”硬上限,修改方法不多講。
FD_SETSIZE
Linux環(huán)境一個(gè)C語(yǔ)言的宏定義,在/usr/include/bits/typesize.h或有定義,默認(rèn)值1024,到目前為止,我只確認(rèn)該宏定義限制FD_SET()、FD_CLR()操作的文件描述符值,猜測(cè)應(yīng)該是Linux早期版本遺留下來(lái)的一個(gè)限制。既然select()操作已經(jīng)淘汰了,這個(gè)宏定義應(yīng)該也沒(méi)用了。如果要使用select()系列操作,可以在gcc編譯時(shí)定義該宏“-DFD_SETSIZE=65535”。
手工修改操作系統(tǒng)句柄,請(qǐng)按照下表修改配置:
操作系統(tǒng) | 查看句柄數(shù)方法 | 修改句柄數(shù)方法 |
Linux | ulimit -Sn ---查看句柄數(shù)軟限制 ulimit -Hn ---查看句柄數(shù)硬限制 | 檢查/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 ---查看句柄數(shù)軟限制 kctune -q maxfiles_lim ---查看句柄數(shù)硬限制 | 執(zhí)行命令修改: kctune maxfiles>=XXX XXX范圍【32,maxfiles_lim】,maxfiles_lim的取值范圍【32,1048576】,但是大于65535時(shí),某些老版本的文件函數(shù)不兼容。 maxfiles修改后,必須重啟操作系統(tǒng)生效。 |
Aix | ulimit -Sn ---查看句柄數(shù)軟限制 ulimit -Hn ---查看句柄數(shù)硬限制 | 檢查/etc/security/limits文件,增加修改如下配置: nofiles = -1 nofiles_hard=-1 在AIX6測(cè)試驗(yàn)證:即使配置為ulimited,單個(gè)進(jìn)程只能打開(kāi)65535個(gè)句柄。 |
Solaris | ulimit -Sn ---查看句柄數(shù)軟限制 ulimit -Hn ---查看句柄數(shù)硬限制 | 檢查/etc/system文件,增加修改如下配置: rlim_fd_max=65535 rlim_fd_cur=65535 修改后,需要重啟機(jī)器生效。 |
本文永久更新鏈接地址:
聯(lián)系客服