歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux---進程句柄限制總結

Linux---進程句柄限制總結

日期:2017/2/28 14:02:27   编辑: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_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

修改後,需要重啟機器生效。

Copyright © Linux教程網 All Rights Reserved