2009年06月30日

apacheのマルチプロセッシングモジュール

今まではデフォルトでやってきたけど、

この度、結構負荷がかかりそうなシステムに携わったのでMPMについて調べた。

MPMとは、Apache HTTP サーバではリクエストを処理する部分のことと解釈している。

方式もいくつかあって、

•prefork
•worker
•perchild
•winnt

とある。デフォルトはprefork。こいつはプロセス形式。

で、今回はスレッド形式であるworker形式に変えてみた。

# 一般的に、プロセスよりスレッドのが軽量&高速と言われてるからという陳腐な理由だが。。。

具体的な方法。

@./configure時に、--with-mpm=workerを付ける。

Aインストール後、httpd.conf内のInclude conf/extra/httpd-mpm.confを有効化。

Bconf/extra/httpd-mpm.confの調整。

<IfModule mpm_worker_module>
StartServers 2
MaxClients 250
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 10000
</IfModule>

# StartServers:Apache起動時のサーバプロセス数
# MaxClients:クライアントからの最大同時接続数
# MinSpareThreads:スペアとして待機しているスレッドの最小数
# MaxSpareThreads:スペアとして待機しているスレッドの最大数
# ThreadsPerChild:各サーバプロセスがコンスタントに起動するスレッド数
# MaxRequestsPerChild:サーバプロセスが処理するリクエストの最大数。
# ここで指定した数の要求を処理すると、自動的にプロセスが消滅します。
# 0は無限に稼動しつづけます。

1つ注意点は、「MaxClients 250」÷「ThreadsPerChild 25」=「ServerLimit 10」となるように、
必ず割り切れる数を指定すること。でなければ怒られる。。。

WARNING: MaxClients (1024) is not an integer multiple of ThreadsPerChild (25),
lowering MaxClients to 1000 for a maximum of 40 child processes,




ついでに、連携先のTomcatの設定も記録。

@tomcat/conf/server.xmlの調整。

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"
connectionTimeout="180000" maxThreads="300"
minSpareThreads="10" maxSpareThreads="100"/>

・connectionTimeout・・・接続のタイムアウト値(デフォルト60000(60秒))
・maxThreads・・・リクエスト処理スレッドの最大数(デフォルトは200)
・minSpareThreads・・・スレッドプールに存在するスペア・スレッドの最低数(デフォルトは4)
・maxSpareThreads・・・スレッドプールに存在できるスペア・スレッドの最大数(デフォルト50)

※DBのmaxconnetion値や、WEBのMaxClients値よって、maxThreadsを調整。
 Apacheからの再接続が発生した場合でも耐えれるようにちょっと多めに。

※maxThreadsと、minSpareThreadsはApacheの設定を基準にちょっと多めに。

※tomcat6からはConnector じゃなくて、executorに記述する!

とりあえずこんな感じで試してみる。

以上!!
posted by hana at 12:51| Comment(0) | TrackBack(0) | Apache Software関連 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック