技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機純凈版,64位旗艦版,綠色軟件,免費軟件下載基地!

當(dāng)前位置:主頁 > 教程 > 服務(wù)器類 >

linux系統(tǒng)級別的能夠打開的文件句柄的數(shù)file-max命令

來源:技術(shù)員聯(lián)盟┆發(fā)布時間:2018-04-24 12:00┆點擊:

  簡單的說, max-file表示系統(tǒng)級別的能夠打開的文件句柄的數(shù)量, 而ulimit -n控制進程級別能夠打開的文件句柄的數(shù)量.

  man 5 proc, 找到file-max的解釋:

  file-max中指定了系統(tǒng)范圍內(nèi)所有進程可打開的文件句柄的數(shù)量限制(系統(tǒng)級別, kernel-level). (The value in file-max denotes the maximum number of file handles that the Linux kernel will allocate).當(dāng)收到”Too many open files in system”這樣的錯誤消息時, 就應(yīng)該曾加這個值了.

  # cat /proc/sys/fs/file-max

  185230

  # echo 100000 > /proc/sys/fs/file-max

  或者

  # echo ""fs.file-max=65535" >> /etc/sysctl.conf

  # sysctl -p

  The kernel constant NR_OPEN imposes an upper limit on the value that may be placed in file-max. (這句啥子意思? 沒太明白)

  對于2.2的內(nèi)核, 還需要考慮inode-max, 一般inode-max設(shè)置為file-max的4倍. 對于2.4及以后的內(nèi)核, 沒有inode-max這個文件了.

  file-nr 可以查看系統(tǒng)中當(dāng)前打開的文件句柄的數(shù)量. 他里面包括3個數(shù)字: 第一個表示已經(jīng)分配了的文件描述符數(shù)量, 第二個表示空閑的文件句柄數(shù)量, 第三個表示能夠打開文件句柄的最大值(跟file-max一致). 內(nèi)核會動態(tài)的分配文件句柄, 但是不會再次釋放他們(這個可能不適應(yīng)最新的內(nèi)核了, 在我的file-nr中看到第二列一直為0, 第一列有增有減)

  man bash, 找到說明ulimit的那一節(jié):

  提供對shell及其啟動的進程的可用資源(包括文件句柄, 進程數(shù)量, core文件大小等)的控制. 這是進程級別的, 也就是說系統(tǒng)中某個session及其啟動的每個進程能打開多少個文件描述符, 能fork出多少個子進程等…

  當(dāng)達到上限時, 會報錯”Too many open files”或者遇上Socket/File: Can’t open so many files等

  另外需要注意的是, 每種資源都有相關(guān)的軟硬限制, 軟限制是內(nèi)核強加給相應(yīng)資源的限制值,硬限制是軟限制的最大值. 非授權(quán)調(diào)用進程只可以將其軟限制指定為0~硬限制范圍中的某個值,同時能不可逆轉(zhuǎn)地降低其硬限制.授權(quán)進程可以任意改變其軟硬限 制.RLIM_INFINITY的值表示不對資源限制.

  分別使用-H和-S選項來指定需要對資源是做硬限制/軟限制的設(shè)置. 如果都不指定, 硬限制和軟限制同時設(shè)置.

  打印資源的限制值, 如果不明確指定-H, 打印的是-S

  要改apache的ulimit, 可以在 /usr/sbin/apachectl 這個腳本中修改 ULIMIT_MAX_FILES 這個值

  可打開文件句柄數(shù)設(shè)置的太大, 有那些危害:

  If the file descriptors are tcp sockets, etc, then you risk using up a large amount of memory for the socket buffers and other kernel objects; this memory is not going to be swappable.

  另外要記得的是socket connection也是文件.