前回の話で何がいけなかったのかというとMaxSpareThreadsが小さすぎたのです。MaxSpareThreadsはクライアント数の変動幅より十分大きくないと、プロセスの終了と起動の頻度が高くなり、結果として終了待ちプロセスの数が増えてしまいます。
MaxSpareThreadsをMaxClientsに合わせてしてしまえば、MaxSpareThreadsが理由でプロセスが終了することはなくなります。しかし、不要なプロセスを起動したままにするのも気持ちが悪いので、できることなら適切に終了させたいものです。
ではいくつぐらいにするといいのでしょうか? このメールにはMaxClientsの50%か少なくとも15%は必要とあります。我々の経験では、平均的な一日の最大クライアント数の25%くらいがいいようです。
もう一つ終了待ちプロセスにかかわるパラメータとしてMaxRequestsPerChildがあります。各プロセスは設定された数だけリクエストを処理すると終了待ちに入ります。デフォルト値は10,000ですが、忙しいサーバにとってこれは小さすぎる値です。別にMaxSpareThreadsによる終了の機会もあるのですから、もっと大きくてもいいでしょう。我々は1,000,000に設定しています。
あと一つ注意しなければならないのはThreadsPerChildです。プロセスの終了は当然ながらプロセス単位ですから、ThreadsPerChildを大きくすると終了に巻き込まれるクライアント数も増えます。結果としてプロセスの終了が遅れることになります。またTCPのコネクションをacceptしてworkerスレッドにディスパッチするlistenerスレッドはプロセスに一個しかないので、性能の点でもあまり大きくしないほうがいいようです(これは確認してません)。我々は256にしています。
ここで述べたworker MPMのパラメータは、あくまでもftp.jaist.ac.jpのようなダウンロードサービスを提供するサーバのためのものです。ワークロードが違えば異なる設定が必要になると思いますので注意してくださいね。
0 件のコメント:
コメントを投稿