OHSの設定についてテストしたいのに、httpd.confの設定値がわかんない・・・
こんにちは!nishiです^^
今回は、Oracle HTTP Server(OHS)のhttpd.confにある設定値について、なるべく分かりやすく解説していきたいと思います。
というのも僕自身がテストする際に試行錯誤したので、
その結果を残しておこうと思います。
まあ、結果として
「この値を変更したらどうなるんだろう?」
「テストする時の参考値ってどのくらい?」
という疑問への答えになっていれば幸いです。
今回は特に、Apache HTTP ServerのMPM(マルチプロセッシングモジュール)Event モジュールの設定について、記載していきます。
また、/server-status/ というものを使えば、スレッド数などの確認ができるので、その辺も分かったことをちょっとだけ共有しときまーす^^
1. プロセスとスレッドの基本
まずは、Event MPMの基本的な仕組みとしてOHS(Apatch)がどうやってリクエストを処理しているのか、簡単に図で説明します
Event MPMは以下のような階層構造で動作します:
OHSサーバー
├── プロセス1(Webリクエストを受け付ける係みたいなもの)
│ ├── スレッド1(実際の作業員さん)
│ ├── スレッド2(実際の作業員さん)
│ └── ...
├── プロセス2
│ ├── スレッド1
│ ├── スレッド2
│ └── ...
└── ...
2. 設定値を理解しよう
▼ StartServers (設定値: 3)
起動時のプロセス数を指定するパラメータです。
「OHS起動時に、何人の係(プロセス)を用意する?」
という設定です。
設定値の3は
「最初に3人の係を用意してね」
という意味。
小さめの値から始めて、負荷に応じて自動的に増えていく設計が一般的です。
▼ ThreadsPerChild (設定値: 25)
各プロセスが持つスレッド数を指定します。
「1人の係(プロセス)が何人の作業員(スレッド)を持つ?」
という設定です。
設定値の25は
「1つのプロセスが25個のスレッドを持つこと」
を意味します。
「1人の係が25人の作業員を管理する」ということですね。
例:3プロセス×25スレッド = 合計75スレッド
▼ MaxRequestWorkers (設定値: 400)
「サーバー全体で同時に何件まで対応できる?」という設定です。
設定値の400は「同時に400件までなら対応できます!」という意味。
計算例:
- 1プロセスが25スレッドを持つ場合
- 400リクエストを処理するには:400 ÷ 25 = 16プロセスが必要
▼ MinSpareThreads (設定値: 75) と MaxSpareThreads (設定値: 250)
待機スレッド数の最小値と最大値
「何人の作業員を待機させておく?」という設定です。
例えば:
- 普段は最低75プロセスは待機させておく
- 忙しくなってきたら、最大250人まで待機要員を増やす
- この75~250人の間で、約1秒ごとに人数をチェックして調整
と、こういう書き方だと誤解してしまいます。
MinSpareThreads (設定値: 75)であっても、これを下回ることもあるし、MaxSpareThreads (設定値: 250)であってもこれを上回ることもある。
この"定期的にチェック"というタイミングで調整されるようですね。
▼ MaxConnectionsPerChild (設定値: 0)
「1人の係(プロセス)が何件処理したら交代する?」という設定です。
設定値の0はプロセスの寿命を無制限にする、という意味。
もし心配なら:
- 例えば10000とか設定する
- (1000回のリクエスト処理後)→ プロセス終了 → 新しいプロセスが作成される
▼ AsyncRequestWorkerFactor (設定値: 2)
プロセスごとの同時接続数の制限値を指定します。
設定値の2は、(ThreadsPerChild × 2)の同時接続を許可することを意味します。
「1つのプロセスがThreadsPerChild の2倍まで受け付けてOK」ということ。
計算例:
- 25スレッド × 2 = 1プロセスで最大50の同時接続OK
3. これらの値の関係性を理解しよう
全体の作業員(スレッド)数はこんな感じ:
起動直後:
- 3(StartServers) × 25(ThreadsPerChild) = 75人の作業員(75スレッド)
最大時:
- 最大400スレッド(MaxRequestWorkers)まで増やせる
待機している作業員の数:
最小:75スレッド(MinSpareThreads)
最大:250スレッド(MaxSpareThreads)
4. テスト時の注意ポイント
テストする時のチェックポイント
サーバーのメモリ使用量
CPU使用率
処理待ちになっているリクエスト数
エラーログの内容
値を変更する時の基本手順
現在の値をメモしておく(戻せるように)
小さな変更から始める
変更後、しばらく様子を見る
問題があったらすぐに戻せるようにしておく
サーバーステータスの確認~server-status~
WebLogicサーバー(管理サーバー)起動、OHS起動、
その後、 https://[ドメイン名]/server-status にアクセスすると、
サーバーの詳細な状況を確認できます。
ここでは以下のような情報が確認できます:
現在のアクティブな接続数
各プロセスが持つスレッド数
リクエストの処理待ち状況
ここでは特にTreadの値に注目します。
MaxRequestWorkersの値は
TreadのBusyとidleの合計値が最大となる値ってことです。
そしてこの縦の行部分のSlot、0~15までありますが、
これはプロセスです。
最初は3とか4とかしかないけど、
大量アクセスなどでプロセスが増えると、
MaxRequestWorkers(400) ÷ ThreadsPerChild(25)=16行
まで増える、ということです。
・・・・・・・
MaxSpareThreadsの値、どこ見ればいいかわかんないや!!(てへぺろ)
まとめ
この設定は、一般的なWebサイトで使える標準的な値と言えます:
起動時は控えめ(3プロセス×25スレッド)
でも最大400件まで対応可能
待機要員も75-250スレッドと余裕がある
プロセスの寿命も無制限で安定重視
実際のテストでは、サーバーの性能や用途に応じて、これらの値を少しずつ調整していってください。