3 種方法教你在 Linux 中修改打開文件數(shù)量限制





Centos7
因?yàn)椴僮飨到y(tǒng)需要內(nèi)存來管理每個文件,所以可以打開的文件數(shù)可能會受到限制。由于程序也可以關(guān)閉文件處理程序,它可以創(chuàng)建任意大小的文件,直到所有可用磁盤空間都已滿為止。在這種情況下,安全性的一個方面是通過施加限制來防止資源耗盡。
可以看到Linux系統(tǒng)中打開的文件描述符的最大數(shù)量,如下所示:
[root@localhost?~]#?cat?/proc/sys/fs/file-max?
180965
該值顯示用戶每次登錄會話可以打開的文件數(shù),你會注意到,結(jié)果可能會因系統(tǒng)而異。出于某些原因,可能需要增加限制集的值。這就是為什么Linux系統(tǒng)提供了修改這些限制的可能性(增加或減少),方法是更改每個進(jìn)程和每個系統(tǒng)打開文件數(shù)的最大值。
ulimit命令可用來增加在shell中打開文件的數(shù)量。這個命令是系統(tǒng)內(nèi)置命令,因此它只影響bash和從它啟動的程序。ulimit語法如下:
ulimit??[選項(xiàng)]?[限制數(shù)值]
-a?顯示當(dāng)前所有限制的報(bào)告-f?(文件限制)限制shell能創(chuàng)建文件的大小-n?限制打開的文件描述符的數(shù)量。-H和-S?它們分別被設(shè)置為硬限制和軟限制。硬限制可能不會隨之增加,但軟限制可能會增加。如果沒有提供任何選項(xiàng),ulimit將同時設(shè)置硬限制和軟限制。
[root@localhost?~]#?ulimit?-a?|grep?open
open?files??????????????????????(-n)?1024
或者
[root@localhost?~]#?ulimit?-n
1024
[root@localhost?~]#?ulimit?-Hn
4096
[root@localhost?~]#?ulimit?-n?2048
[root@localhost?~]#?ulimit?-Hn
2048
[root@localhost?~]#?ulimit?-Sn
2048

發(fā)現(xiàn),設(shè)置ulimit 值的時候,沒有指定-H或者-S,兩個限制都會設(shè)定相同的值。
現(xiàn)在的問題是,如果退出登錄或者重新啟動計(jì)算機(jī),該值將被重置。請記住,要使生效,需要編輯用戶的.bashrc或者.bash_profile配置文件,通過將ulimit命令行添加到文件的末尾,可以使參數(shù)生效。
[root@localhost?~]#?echo?"ulimit?-n?2048"?>>?~/.bashrc

最好通過名為pam_limits的PAM模塊實(shí)現(xiàn)這種限制。需要通過編輯/etc/security/limits.conf文件來配置它。這個文件包含四個基本字段:
domain:描述了在哪些實(shí)體中應(yīng)用限制。它可以是user、group(組名前面加@表示組)或匹配所有用戶,使用(*)通配符。通配符不適應(yīng)與root用戶。
type:這里表示限制為硬限制還是軟限制?硬限制是由系統(tǒng)管理員添加的,在任何情況下都不能超過,而用戶可以臨時超過軟限制。還可以使用破折號-來表示一個限制是硬的和軟的。請注意,軟限制可以增加到硬限制的值
type:它指定被限制條目的類型??梢允莄ore(限制核心文件大小(KB)),data(最大數(shù)據(jù)大小(KB)),fsize(最大文件大小(KB)),nofile(打開的文件描述符的最大數(shù)目),nproc(最大進(jìn)程數(shù)),等類型。更多類型可以使用man limits.conf查看。
type: 這里使填寫應(yīng)用限制的數(shù)值。
下面實(shí)例可以對照了解一下。
[root@localhost?~]#?tail?-12?/etc/security/limits.conf?
#
#
#*???????????????soft????core????????????0
#*???????????????hard????rss?????????????10000
#@student????????hard????nproc???????????20
#@faculty????????soft????nproc???????????20
#@faculty????????hard????nproc???????????50
#ftp?????????????hard????nproc???????????0
#@student????????-???????maxlogins???????4
#?End?of?file

要編輯所有用戶打開文件的最大數(shù)量,可以在文件末尾添加以下行:
[root@localhost?~]#?vim?/etc/security/limits.conf?
*?hard?nofile?20000
*?soft?nofile?15000

之后,需要編輯文件/etc/pam.d/login配置文件,在最后添加以下一條內(nèi)容:
[root@localhost?~]#?vim?/etc/pam.d/login?
session????required?pam_limits.so

保存文件。然后退出登錄,或者重啟系統(tǒng)??梢钥吹杰浵拗坪陀蚕拗频闹刀夹薷某晒α耍?/span>
[root@localhost?~]#?ulimit?-Sn
15000
[root@localhost?~]#?ulimit?-Hn
20000
[root@localhost?~]#?cat?/proc/sys/fs/file-max?
180965
[root@localhost?~]#?echo?"1000000"?>?/proc/sys/fs/file-max?

永久性設(shè)置,需要在
/etc/sysctl.conf中設(shè)置,并讓它生效:[root@localhost?~]#?echo?"fs.file-max?=?1000000"?>>?/etc/sysctl.conf?
[root@localhost?~]#?sysctl?-p
fs.file-max?=?1000000
所有進(jìn)程打開的文件描述符數(shù)量不能超過/proc/sys/fs/file-max。單個進(jìn)程打開的文件描述符數(shù)不能超過user limit中nofile的soft limit。nofile的soft limit不能超過其hard limit。
推薦閱讀:
5T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機(jī),樹莓派,等等。在公眾號內(nèi)回復(fù)「1024」,即可免費(fèi)獲?。?!
