首頁 > 軟體

Linux---進程控制代碼限制總結

2020-06-16 18:02:12

受網上很多貼文影響,一直認為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.linuxidc.com/Linux/2015-04/116392.htm


IT145.com E-mail:sddin#qq.com