Debian
如何在 debian 中規避“打開的文件過多”
如果我想一次查看我的 apache2 伺服器的所有相關日誌文件,我使用
tail -f /var/kunden/logs/*log /var/kunden/logs/*log /var/log/apache2/*log |grep -v robots|grep -v favicon
但由於現在這些文件太多了,我想增加這個限制。
如何為一個 ssh 會話增加它?我怎樣才能在全球系統範圍內增加它?
我可以看到我的機器上的打開文件限制為 1024:
ulimit -n 1024
重要的是要知道有兩種限制:
- 硬限制只能由root 配置。這是軟限制的最高可能值(限制)。
- 普通使用者可以設置**軟限制。**這是有效的實際限制。
單個會話的解決方案
在 shell 中設置軟限制:
ulimit -Sn 2048
此範例將實際限制提高到 2048,但該命令僅在硬限制(檢查:)
ulimit -Hn
相同或更高時才會成功。如果您需要更高的值,請使用以下方法之一提高硬限制。限制是按程序設置的,並且它們由新生成的程序繼承,因此您在同一 shell 中在此命令之後執行的任何內容都將具有新的限制。在單個會話中更改硬限制
這並不容易,因為只有 root 可以更改硬限制,並且在切換到 root 後,您必須切換回原始使用者。這是解決方案
sudo
:sudo sh -c "ulimit -Hn 9000 ; exec su \"$USER\""
全系統解決方案
在 Debian 和許多其他使用系統中,
pam_limits
您可以/etc/security/limits.conf
在/etc/security/limits.d
. conf 文件包含描述。範例行:@webadmins hard nofile 16384 @webadmins soft nofile 8192
這將為登錄後組中的使用者設置硬限制和預設軟限制
webadmins
。其他限制
硬限制值受打開文件描述符值的全域限制值的限制,
/proc/sys/fs/file-max
在現代 Linux 發行版中預設情況下該值相當高。此值受NR_OPEN
核心編譯期間使用的值的限制。沒有更好的解決方案嗎?
也許您可以檢查您提供的所有
*log
文件是否tail -f
都是需要監控的活動文件。其中一些可能已經關閉以進行日誌記錄,您可以只打開較少數量的文件。