Debian

如何在 debian 中規避“打開的文件過多”

  • June 12, 2017

如果我想一次查看我的 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都是需要監控的活動文件。其中一些可能已經關閉以進行日誌記錄,您可以只打開較少數量的文件。

引用自:https://unix.stackexchange.com/questions/85457