2021-05-12 14:32:11
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 修改後,需要重新啟動機器生效。 |
本文永久更新連結地址:http://www.linuxidc.com/Linux/2015-04/116392.htm
相關文章