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

答え1

2種類の制限があることを知ることが重要です。

  • ハード制限ルートとしてのみ設定できます。これはソフト制限の可能な最も高い値(制限)です。
  • ソフトリミット一般ユーザーが設定できます。これが実際に適用される制限です。

シングルセッションソリューション

シェルでソフト制限を設定します。

ulimit -Sn 2048

この例では、実際の制限を2048に増やしますが、ハード制限ulimit -Hn(check:)が同じかそれより高い場合にのみコマンドは成功します。より高い値が必要な場合は、次のいずれかの方法でハード制限を増やします。これらの制限はプロセスごとに設定され、新しく作成されたプロセスによって継承されるため、同じシェルでこのコマンドを実行した後に実行されるすべてのエントリには新しい制限が適用されます。

単一セッションでハード制限を変更する

ルートのみハード制限を変更でき、ルートに切り替えた後は元のユーザーに戻す必要があるため、簡単ではありません。解決策は次のとおりですsudo

sudo sh -c "ulimit -Hn 9000 ; exec su \"$USER\""

フルシステムソリューション

Debianや他の多くのシステムでは、.confファイルに説明を含めることpam_limitsができます。例示ライン:/etc/security/limits.conf/etc/security/limits.d

@webadmins       hard     nofile     16384
@webadmins       soft     nofile      8192

webadminsログイン後、グループ内のユーザーのハード制限とデフォルトのソフト制限が設定されます。

その他の制限事項

ハード制限値は、オープンファイル記述子値のグローバル制限によって制限されます。/proc/sys/fs/file-maxこれは、最新のLinuxディストリビューションでは基本的にかなり高いです。この値は、NR_OPENカーネルのコンパイル時に使用される値に制限されます。

より良い解決策はありませんか?

*log指定したすべてのファイルがtail -f実際に監視する必要があるアクティブファイルであることを確認できます。これらのファイルのいくつかはログ記録のために閉じられている可能性があるため、いくつかのファイルを開くだけです。

答え2

Apache error.logにPHP警告があります。

failed to open stream: Too many open files in ...

だから私はApacheが起動時に(Ubuntu 14.04で)この値を個別に設定することに気づきました。で構成されています/etc/apache2/envvars

## If you need a higher file descriptor limit, uncomment and adjust the
## following line (default is 8192):
#APACHE_ULIMIT_MAX_FILES='ulimit -n 65536'

だから3行目を調整する必要がありました。

関連情報