Linux 中增加最大開啟檔案數
如果您在使用 Linux,那麼您一定多次遇到過 **“開啟的檔案太多 (24)”** 錯誤。Linux 作業系統提供了一種限制每個使用者可以使用的檔案數量的方法。本文提供了有關如何在 Linux 作業系統中增加開啟檔案數或檔案描述符數量的見解。
ulimit 命令可以控制 shell 或程序,並且需要 **以 root 使用者身份登入**。**ulimit** 命令用於設定僅適用於您當前會話的檔案限制。
使用以下命令顯示最大開啟檔案描述符數量 -
# cat /proc/sys/fs/file-max 801841
在上述命令中,使用者在一個登入會話中可以開啟 **801841** 個檔案。要檢視檔案描述符的硬限制和軟限制,請使用以下命令 -
檔案描述符的硬限制
硬限制值只能由 root 使用者修改。非 root 使用者無法超過硬限制。
我們可以使用以下命令檢查硬限制 -
$ ulimit -Hn 4096
在上述命令中,“H”選項表示硬限制,“n”表示檔案數量。
檔案描述符的軟限制
軟限制值可以隨時由使用者程序修改。它用於停用核心轉儲。
我們可以使用以下命令檢查硬限制 -
$ ulimit -Sn 1024
在上述命令中,“S”選項表示軟限制,“n”表示檔案數量。
修復“開啟的檔案太多”錯誤
可以透過在核心變數 /proc/sys/fs/file-max 中設定新值來增加最大開啟檔案數,如下所示 -
$ sysctl -w fs.file-max=100000 fs.file-max = 100000
上述命令將最大開啟檔案限制強制設定為 **100000**,並且此設定適用於特定會話。如果您希望將此值設定為永久生效,則需要編輯 /etc/sysctl.conf 檔案並新增以下行 -
$ vi /etc/sysctl.conf
示例輸出應如下所示 -
........ # # Do not send ICMP redirects (we are not a router) #net.ipv4.conf.all.send_redirects = 0 # # Do not accept IP source route packets (we are not a router) #net.ipv4.conf.all.accept_source_route = 0 #net.ipv6.conf.all.accept_source_route = 0 # # Log Martian Packets #net.ipv4.conf.all.log_martians = 1 #fs.file-max = 50000
將 file-max 值替換為 **100000** 並儲存。使用者需要登出並重新登入才能使更改生效,或者只需鍵入以下命令 -
$ sysctl -p
要進行驗證,請使用以下命令 -
$ cat /proc/sys/fs/file-max
示例輸出應如下所示 -
$ cat /proc/sys/fs/file-max 100000
使用者級檔案描述符限制
上述過程描述了系統級檔案描述符限制。但是,我們可以設定使用者級檔案描述符限制。要指定使用者級檔案描述符限制,您可以透過編輯 /etc/security/limits.conf 檔案來實現。
要編輯檔案,請使用以下命令 -
$ vi /etc/security/limits.conf
示例輸出應如下所示 -
..... #* soft core 0 #root hard core 100000 #* hard rss 10000 #@student hard nproc 20 #@faculty soft nproc 20 #@faculty hard nproc 50 #ftp hard nproc 0 #ftp - chroot /ftp #@student - maxlogins 4
將以下行新增到 limits.conf 檔案 -
#tp soft nofile 4096 #tp hard nofile 10240
這裡 **tp** 是系統使用者的使用者名稱。儲存並關閉檔案。要檢視限制,請使用上面顯示的 ulimits 命令。
恭喜!現在,您知道“如何增加最大開啟檔案數或檔案描述符”。我們將在下一篇 Linux 文章中學習更多關於此類命令的知識。繼續關注!