Ubuntu で postfix を実行して、1 日に大量のメール (約 100 万通) を送信しています。負荷は非常に高いのですが、CPU とメモリの負荷はそれほど大きくありません。同じような状況で、ボトルネックを解消する方法を知っている人はいませんか?
このサーバー上のすべてのメールは送信用です。
ボトルネックはディスクにあると想定する必要があります。
最新情報ですが、iostat は次のようになります。
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.12 99.88 0.00 0.00
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 12.38 0.00 2.48 0.00 118.81 48.00 0.00 0.00 0.00 0.00
sdb 1.49 22.28 72.28 42.57 629.70 1041.58 14.55 135.56 834.31 8.71 100.00
これらの数値は、単一のディスクから期待されるパフォーマンスと一致していますか?
sdb は postfix 専用です。
キューのシャッフル、つまり受信→アクティブ→延期ということだと思います
質問の詳細:
サーバー: クアッドコア Xeon(R) CPU E5405 @ 2.00GH、4 GB RAM
負荷平均: 464.88、489.11、483.91、4 コア。ただし、メモリ使用率と CPU は最小限です。
Postfixインスタンス数16~32
答え1
ちょっとおかしいように聞こえるかもしれませんが、次のことを実行してください。
- ログ記録を必要最小限に抑えます。syslog が mail.err 以上のみをログに記録するようにします。
- RAM を追加します。確かに Postfix には RAM は必要ありませんが、RAM を追加するとカーネルのページ キャッシュも追加されます。
- /dev/sdb 上のファイルシステムについては触れていませんが (これも重要です)、必ず に切り替えてください。
noatime
これにより、負荷が少なくとも少しは軽減されるはずです。 - /var/spool/postfix の大きさを確認します。数ギガ未満の場合は、RAM ディスクに移動することを検討してください。
答え2
「/var/spool/postfix」に RAM ディスクを使用するよう提案した人たちには同意できません。これは、メール キュー全体が RAM に保存されることを意味します。サーバーがクラッシュしたり、電源が落ちたりすると、キュー内のメッセージは永久に失われます。メッセージはすでに正常に配信を受け付けているため、クライアント/ユーザーの観点からすると、これは非常に悪い状況です。さらに悪いことに、サーバーが復旧したときにキューが空になっているため、メールがバウンスした、または配信できなかったという通知がサーバーから送信されません。
代わりに、できるだけ多くの高速ディスクを追加することをお勧めします。提供されている情報から、必要なディスクの数を正確に見積もることはできません。上記の「iostat」出力から、'sdb' に対して約 120 IOPS (r/s と w/s の合計) を実行しているようです。1 台の 15k RPM SCSI または FC ディスクで 150 IOPS を処理できると合理的に見積もることができます。まず、5 台の 15k RPM SCSI ディスクと適切な RAID コントローラを用意します。4 台のドライブに 1 台のホット スペアを使用して RAID-10 として設定します。これで問題が完全に解決するかどうかはわかりませんが、悪化することは絶対にありません。
答え3
postfix を何らかのプロファイラ (gprof?) で実行するか、ログを調べます。Postfix は多くのタイミング情報をログに記録し、どこで遅延が発生しているかを示します。一般的に調べる場所は次のとおりです。
- ディスク パフォーマンス。キューに RAID-10 を導入する時期かもしれません。
- メッセージ上のあらゆる種類のネットワーク IO。DNS ブラックリスト? SAV?
- インストールした Milter およびその他のフィルター。
- 認証と UID 検索はネットワーク経由またはプロセス (ldap、sql) に対して実行されます。
- プロキシを使用しない: 遅いマップの場合(上記のような)
答え4
ディスク サブシステムは、少なくとも問題の一部として確認する必要があるようです。postfix が /var 周辺のファイルをシャッフルする方法のため、ファイルシステム レベルでパフォーマンスを向上できないかどうかを確認するには、「ext3 ファイルシステムの調整」(少なくとも noatime と writeback の設定) を Google で検索することをお勧めします。
私は、顧客宛ての電子メール用に DNS と送信 SMTP の両方の役割を担う 2 つのサーバー クラスターを所有しており、このような I/O バインドアップにはまったく近づかずに、毎日 25 万件のメッセージ (2,000 ~ 10,000 件/時間) を処理しています。