web-dev-qa-db-ja.com

LinuxサービスのCPU / IO使用量の制限

EXIMがユーザー/スクリプトからの10000通の電子メールによってロードされると、システムがクラッシュするのを見てきました。システムでの使用を制限し、システムまたはサービスを悪用から保護する方法があるかどうか疑問に思いました。

2
Tiffany Walker

Eximが負荷を減らすためにできることがいくつかあります。

  1. 高負荷を検出し、スクリプトを配信しようとするのではなく、スクリプトによって生成された多数の着信メッセージをeximキューに入れます。次のオプションがそれに関連しています:
     queue_only_load負荷が高い場合、即時配信はありません
     queue_only_load_latchは各メッセージの負荷を再評価しません
     queue_only_overrideコマンドラインのオーバーライドを許可します
    
  2. /var/log/exim/main.logファイル(またはディストリビューションに付けられた名前)から情報を抽出するために、grepまたはexigrepを使用することに慣れている可能性があります。 Eximはまた、デフォルトでこのログのメッセージごとのコピーを維持し、各メッセージのメールログを単一のファイルにグループ化し、メッセージが配信されたときに削除します。 'exim -Mvl QUEUEID'を使用して、単一のメッセージについてこれらを表示できます。または、オフにします:

    負荷の高いシステムでは、ディスクI/Oを削減するために、メッセージごとのログの使用を無効にすることが望ましい場合があります。これは、message_logsオプションをfalseに設定することで実行できます。

  3. ローカルではなくリモートサーバーにログを記録するためにsyslogを使用してテストします。これにより、ディスクのI/Oがわずかに減少しますが、大量の電子メールの作成などによるI/Oと比較すると見劣りすると思います。
  4. メールサーバーへのメールの挿入が完了すると、負荷が低下します。その時点で、多数のキューランナーを起動します。 Eximはキューからのメッセージの配信が遅いことで知られていますが、負荷が低い場合は、キューを実行してメールをより迅速に配信するのに十分な配信プロセスを開始しても問題はありません...負荷が抑制されるまで(通常、ディスクI/O使用率が飽和状態に達していることを示します)。一度に10個のキューランナーを作成してみてください。過度の負荷をかけずに100または150を実行できると思います。 「iostat-x-d 1」は、ディスクI/Oがボトルネックであるかどうかを確認するための友だちです。
  5. アウトバウンドメールサーバーのDNSを順方向と逆方向の両方で確認します。受信者サーバーが見るIPがあなたが思っているものと同じであり、それも順方向および逆方向に解決可能でなければならないことを確認してください。
3
Todd Lyons

ツール「Nice」と「ionice」をチェックして、CPU使用率に対する要求の厳しいプロセスの影響を減らし、他のツールをチェックしてIOタスクへの影響を減らすことをお勧めします。ディスクスループットのスロットリングにioniceを使用しないでください)

または、カーネルcgroupsサブシステムを確認することもできます。 Cgroupは、ハードメモリとソフトメモリの制限の作成、およびディスク使用量の調整をサポートします。 (ディスク使用量の調整にはCFQスケジューラーを使用する必要があります)

1
Hrvoje Špoljar

PAM Limits/etc/security/limits.conf)またはulimitを使用すると、必要なことができる場合があります。

0
Aaron Copley