在Linux中修改開啟檔案數量限制的3種方法

roc_guo發表於2020-12-04
當檔案被開啟訪問時,作業系統臨時分配一個名為檔案控制程式碼的數字。主記憶體的一個特殊區域是為檔案控制程式碼預留的,這個區域的大小決定了一次可以開啟多少個檔案。 上的程式受到許多限制,這些限制也阻礙它們正確地執行,而且每個程式都有幾個與之相關的限制。 限制程式可以同時開啟的檔案控制程式碼的數量。
系統環境

7

為什麼要限制開啟檔案的數量?

因為作業系統需要記憶體來管理每個檔案,所以可以開啟的檔案數可能會受到限制。由於程式也可以關閉檔案處理程式,它可以建立任意大小的檔案,直到所有可用磁碟空間都已滿為止。在這種情況下,安全性的一個方面是通過施加限制來防止資源耗盡。

可以看到 中開啟的檔案描述符的最大數量,如下所示:

[root@localhost ~]# cat /proc/sys/fs/file-max 
180965

該值顯示使用者每次登入會話可以開啟的檔案數,你會注意到,結果可能會因系統而異。出於某些原因,可能需要增加限制集的值。這就是為什麼Linux系統提供了修改這些限制的可能性(增加或減少),方法是更改每個程式和每個系統開啟檔案數的最大值。

方法一:使用ulimit

ulimit 可用來增加在shell中開啟檔案的數量。這個命令是系統內建命令,因此它隻影響bash和從它啟動的程式。ulimit語法如下:

ulimit  [選項] [限制數值]

下面選項決定了什麼是有限的:

  • -a 顯示當前所有限制的報告
  • -f (檔案限制)限制shell能建立檔案的大小
  • -n 限制開啟的檔案描述符的數量。
  • -H-S 它們分別被設定為硬限制和軟限制。硬限制可能不會隨之增加,但軟限制可能會增加。如果沒有提供任何選項,ulimit將同時設定硬限制和軟限制。

檢視當前開啟檔案的軟限制,可以使用下面命令:

[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

在Linux中修改開啟檔案數量限制的3種方法在Linux中修改開啟檔案數量限制的3種方法
發現,設定ulimit 值的時候,沒有指定-H或者-S,兩個限制都會設定相同的值。

現在的問題是,如果退出登入或者重新啟動計算機,該值將被重置。請記住,要使生效,需要編輯使用者的 .bashrc或者.bash_profile配置檔案,通過將ulimit命令列新增到檔案的末尾,可以使引數生效。

[root@localhost ~]# echo "ulimit -n 2048" >> ~/.bashrc

在Linux中修改開啟檔案數量限制的3種方法在Linux中修改開啟檔案數量限制的3種方法

方法二:使用PAM模組

最好通過名為 pam_limits的PAM模組實現這種限制。需要通過編輯 /etc/security/limits.conf檔案來配置它。這個檔案包含四個基本欄位:

domain:描述了在哪些實體中應用限制。它可以是user、group(組名前面加@表示組)或匹配所有使用者,使用(*)萬用字元。萬用字元不適應與root使用者。

type:這裡表示限制為硬限制還是軟限制?硬限制是由系統管理員新增的,在任何情況下都不能超過,而使用者可以臨時超過軟限制。還可以使用破折號 -來表示一個限制是硬的和軟的。請注意,軟限制可以增加到硬限制的值

type:它指定被限制條目的型別。可以是core(限制核心檔案大小(KB)),data(最大資料大小(KB)),fsize(最大檔案大小(KB)),nofile(開啟的檔案描述符的最大數目),nproc(最大程式數),等型別。更多型別可以使用 man limits.conf檢視。

type: 這裡使填寫應用限制的數值。

下面例項可以對照了解一下。

[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

在Linux中修改開啟檔案數量限制的3種方法在Linux中修改開啟檔案數量限制的3種方法
要編輯所有使用者開啟檔案的最大數量,可以在檔案末尾新增以下行:

[root@localhost ~]# vim /etc/security/limits.conf 
* hard nofile 20000
* soft nofile 15000

在Linux中修改開啟檔案數量限制的3種方法在Linux中修改開啟檔案數量限制的3種方法
之後,需要編輯檔案/etc/pam.d/login配置檔案,在最後新增以下一條內容:

[root@localhost ~]# vim /etc/pam.d/login 
session    required pam_limits.so

在Linux中修改開啟檔案數量限制的3種方法在Linux中修改開啟檔案數量限制的3種方法
儲存檔案。然後退出登入,或者重啟系統。可以看到軟限制和硬限制的值都修改成功了:

[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

在Linux中修改開啟檔案數量限制的3種方法在Linux中修改開啟檔案數量限制的3種方法
永久性設定,需要在 /etc/sysctl.conf中設定,並讓它生效:

[root@localhost ~]# echo "fs.file-max = 1000000" >> /etc/sysctl.conf 
[root@localhost ~]# sysctl -p
fs.file-max = 1000000
總結

所有程式開啟的檔案描述符數量不能超過/proc/sys/fs/file-max。單個程式開啟的檔案描述符數不能超過user limit中nofile的soft limit。nofile的soft limit不能超過其hard limit。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524109/viewspace-2794001/,如需轉載,請註明出處,否則將追究法律責任。

相關文章