マルチプロセスについて

マルチプロセス機能は、PMailServer2本体(pmservice.exe)を複数起動し、処理を分散する為の機能となります。

マルチプロセス1


各プロセスの役割について

マルチプロセス2

設定のワンポイント

*1 MTA は最後のプロセスにのみ割り当てが行われ、これは変更することはできません。(サーバー全体で MTA 処理をするプロセスは1つのみとなります)

マルチプロセスモードの動作
  1. まず SCM(Service Control Manager)に登録された pmservice.exe が親プロセスとして起動します。
  2. 親プロセスとして起動した pmservice.exe が指定された数だけ、子プロセスとして pmservice.exe を多重起動します。
  3. 親プロセスは子プロセスの監視(*1)と接続の割り振りを行う為に待機状態になります。
  4. クライアントから接続があると、親プロセスが接続の割り振りを行い子プロセスに引き継ぎます。以降の処理は子プロセスが担当します。

(*1) 親プロセスは接続の度に子プロセスの生存確認を行います。もし子プロセスがなんらかの理由により終了している場合、子プロセスの再起動を行います。


マルチプロセスのメリット・デメリット

PMailServer2 は1つのプロセスにつき各プロトコルで同時に 100接続(スレッド)まで受け付けるようになっています。
1つの PMailServer2 のプロセスは、全てのプロトコル及び MTA を有効にした状態で、最大 400スレッド+メインスレッド+ログチェックを利用している場合は+4スレッド、サービス管理用のスレッドが1、メーリングリストを使用している場合は1の最大400スレッド+αを使用します。(全てのプロトコルに同時に接続があった場合での最大値です)

Windows OS に搭載されているメモリや OS のエディション(32bit / 64bit)、他の実行されているアプリケーションの状況によって左右されますが、1プロセス辺り最大 2048スレッド(32bit版 Windows OS での理論値)まで生成できますが、現実として、ここまで生成した場合、非常に負荷が高くなる。各スレッドが非常に遅くなる等の理由により正常に動作しなくなります。

マルチプロセスを有効にする変わりに、1プロセス辺りのスレッド数を減らすことにより、各プロセスの負荷を減らし、また同時接続数を増やすことができます。
それ以外にも、1つのスレッドで致命的なエラーが発生した場合、プロセスが異常終了する場合がありますが、マルチプロセスにより、1つのプロセスが異常終了しても、引き続き他のプロセスが処理を続行することも可能となります。

ただし、マルチプロセスにすれば無制限に増やすことができる訳では無く、特にメールサーバーの場合は、ファイル I/O 処理が非常に大きいので(データベース等であれば、キャッシュする、オンメモリ等で処理を行う等ができますが、メールサーバーは、メールを受信したらディスクに保存しなければなりませんし、メールの送信や転送等で都度ファイルの生成等が必要になりますので、接続数の規模にあった形でのメモリや高速なストレージを用意する必要があります。
極端な例ですが、SSD上で同時に 100スレッド処理を行っても、FDD上で動かす 1スレッドよりも早い。ということになります。

ただし、マルチプロセスはメリットだけでは無くデメリットもありますので「必ずマルチプロセスが有利」という訳でもありませんので、ご注意下さい。


マルチプロセスに必要なスペック
どのプロトコルにどの程度の接続があり、且つ、どの程度の送受信が発生するかで変わってきますので、一概に「これくらいのスペックがあれば、これくらいの接続数を処理できます」という明確な答えがありません。
起動するだけであれば、最大数まで起動しても処理に問題はありません(無駄にメモリを消費するくらいです)

上記は、開発段階でのテスト中の様子ですが、CPU Corei3 (2.4GHz) / Memory 4G / Windows7 32bit / SSD(520GB) で、1Gbps での LAN接続を行った別の端末から、専用のストレスソフト(SMTP は接続、メール送信(1KByte)、切断。POP3 はメールボックス内の 20通のメールを全て受信。IMAP4 はメールボックス内の 20通のメールを FETCH しています)で負荷状況を確認している状態です。

右下にある数値は「同時接続数」になります。(注:IMAP4 が限界値500を超えているのはテスト版でプロセス数の限界を超えて設定できるようにしている為です。) CPU 負荷も高くなりますが、100% に張り付くことはありませんでした。
ただし、前項にもありますようにストレージ速度の影響を大きく受けます。これが HDD である場合は、数値が下がる可能性があり、ネットワークドライブの場合は更に下がると思われます。


マルチプロセス機能での問題に関して
マルチプロセスモードはサーバー本体(親プロセス)から、サーバー本体(子プロセス)を起動し、各プロセスが同期を取って動作します。
起動状況は、Logs フォルダの作成される、startup.log に記録され、問題が発生した場合、発生場所によっては別途 Worker_error.log というファイルが生成されます。
問題点をご連絡頂く際には、上記2つ(Worker_error.log は無い場合もあります)を必ずお送り下さい。
これらのログファイルについてはファイル名は固定でローテートも行われません。サイズ自体は小さいのでそのままにしておいて頂いて問題はありませんが、不要であれば定期的に削除を行って下さい。
マルチプロセス機能を利用する際の注意事項

マルチプロセス機能を利用する際の FAQ