ApacheのWorkerについて質問です。


このような設定でapacheをパフォーマンス向上の目的でworkerモードで動作させています。
<IfModule worker.c>
ServerLimit 3
StartServers 2
MaxClients 75
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 256
</IfModule>

あるページをSpeedyCGIで動作させているのですが、そのページをYahooのボットなどがクロールし始めたり
ちょっと同時アクセスが増えると300MぐらいあるhttpdプロセスやSpeedyCGIのプロセスが60ほど起動し
Swapを使い果たしてしまうような感じです。

きっと設定が悪いのですが、ServerLimitは設定してありますしどのあたりが悪いのか分かりません。
安定稼働させたいのですが、いい設定方法などは無いでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2010/01/09 23:25:51
  • 終了:2010/01/16 23:30:02

回答(3件)

id:pah00 No.1

pah00回答回数208ベストアンサー獲得回数52010/01/09 23:47:32

ポイント27pt

MaxRequestsPerChild 256

この値が小さすぎます。

4000ぐらいは最低必要です。

id:yumtan

5000ぐらいにしてみました。

有難うございます。

2010/01/10 20:03:46
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402010/01/10 13:56:01

ポイント27pt

きっと設定が悪いのですが、ServerLimitは設定してありますし

同時実行数に関しては MaxClient の方が直接的に作用する。

mpm_common - Apache HTTP サーバ


300MぐらいあるhttpdプロセスやSpeedyCGIのプロセス

300M ぐらいあるのはどっち?

httpd がメモリ食ってるなら異常な状態だし、SpeedyCGI の方なら実メモリと併せて上限が計算できるはず。


安定稼働させたいのですが、いい設定方法などは無いでしょうか?

現状の情報だけだと何とも言えないなぁ。

Yahoo! のクローラーが問題ならクローラーだけ同時アクセス数を絞ればいいだろうし、

アプリがメモリを食い過ぎてるようなら設計から見直すべき。

id:yumtan

同時実行数に関しては MaxClient の方が直接的に作用する。

なるほど。

プロセスの数を制限するにはServerLimitであっていますよね?

300M ぐらいあるのはどっち?

httpd がメモリ食ってるなら異常な状態だし、SpeedyCGI の方なら実メモリと併せて上限が計算できるはず。

それはhttpdです。

書き忘れていたのですがlibphp5を導入してるからだと思います。

workerですのでlibphpなど導入していると1プロセスあたり300Mぐらいになるのは普通だと思っていたのですが違いますか?

speedycgiは1プロセスあたり20Mぐらいです。

現状の情報だけだと何とも言えないなぁ。

Yahoo! のクローラーが問題ならクローラーだけ同時アクセス数を絞ればいいだろうし、

アプリがメモリを食い過ぎてるようなら設計から見直すべき。

ですよね…

httpdのプロセスの数を制限出来たら嬉しいのですが…

2010/01/10 20:16:59
  • id:b-wind
    >workerですのでlibphpなど導入していると1プロセスあたり300Mぐらいになるのは普通だと思っていたのですが違いますか?
    アプリ次第なのでなんとも言えんがそういう場合フロントと PHP を動かすバックエンドの Apache は別ものとして( conf を分けて )動かすのが普通。
    あと PHP ってまだ worker に正式対応してなかったんじゃあ? prefork だけのはず。
  • id:yumtan
    >アプリ次第なのでなんとも言えんがそういう場合フロントと PHP を動かすバックエンドの Apache は別ものとして( conf を分けて )動かすのが普通。
    ですよね…
    当方面倒臭がりなもので。
    >あと PHP ってまだ worker に正式対応してなかったんじゃあ? prefork だけのはず。
    configureに--with-tsm-pthreadsと--enable-maintainer-ztsを付ければ無理矢理ですがlibphpもworker対応させる事が出来ました。
    ただ、dl関数が使えなかったり色々制限されるみたいですが。
  • id:b-wind
    >ですよね…
    >当方面倒臭がりなもので。
    いや、そこは面倒くさくてもやらないと。
    クローラーはフロントの(各種モジュールを削減した)軽量プロセスで削減した Apache 等で
    捌いてしまえばこの問題自体が発生しなくなるよ。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません