見出し画像

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)であってもこれを上回ることもある。

サーバーは、現在の負荷を処理するのに十分なサーバー・スレッドに加え、一時的な負荷の増大(単一のブラウザから複数のリクエストを同時に受信した場合など)に備えて、予備のサーバー・スレッドもいくつか保持しておこうとします。

そのために、サーバーはリクエストを待っているサーバー・スレッドの数を定期的にチェックします。それがMinSpareThreadsより少ない場合は、新しい予備のスレッドを作成します。MaxSpareThreadsより多い場合は、予備のスレッドの一部を削除します。

https://docs.oracle.com/cd/E53284_01/doc.1112/b71702/http.htm

この"定期的にチェック"というタイミングで調整されるようですね。

▼ 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. テスト時の注意ポイント

テストする時のチェックポイント

  1. サーバーのメモリ使用量

  2. CPU使用率

  3. 処理待ちになっているリクエスト数

  4. エラーログの内容

値を変更する時の基本手順

  1. 現在の値をメモしておく(戻せるように)

  2. 小さな変更から始める

  3. 変更後、しばらく様子を見る

  4. 問題があったらすぐに戻せるようにしておく

サーバーステータスの確認~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スレッドと余裕がある

  • プロセスの寿命も無制限で安定重視

実際のテストでは、サーバーの性能や用途に応じて、これらの値を少しずつ調整していってください。

いいなと思ったら応援しよう!