gw として運用中の Apache 設定見直すと負荷やレスポンス速度を改善できるかもしれないオススメ設定

Apacheのmpmを見直したら幸せになった

本記事は筆者の経験談ブログになります。

発生していた事例

gw として application サーバとの橋渡しを行っていたサーバがあるのですが、アクセス数が増加すると接続速度の遅延が目立つようになりました。
場合によってはレスポンスに 10 秒以上かかる場合もあり、コア数やメモリ等試行錯誤しながら調整を行っていたのですが、最終的に gw に搭載している web エンジン apache の設定を見直しただけでかなり改善されたので、内容を共有します。

事例の発生した gw 構築環境

Server OS : Linux centOS
Web Engine : Apache 2.4

所用時間

15 分程

問題点を結論から

結論から言うと apache の mpm 設定を prefork から event に変更することで改善しました。
簡単に概要を説明すると prefork と event は以下の用途の違いがあります。

  • prefolk
    → ruby 等のバックエンドアプリが同居している場合に有効
  • event
    → gw としての役割といった、バックエンドアプリを有さない gw 等のサーバで有効


event に変更することで必要となる設定がございますので、本記事では計算方法と一緒に説明させていただきます。

mpm のエンジンを切り替える

mpm は使用エンジンの切り替えが簡単にできます。
まずは prefork から event に切り替えます。

以下のファイルの中身を変更します。
/etc/httpd/conf.modules.d/00-mpm.conf

上記の設定が終わったら、以下のコマンドで apache を再起動し module をリロードします。

event エンジンの詳細設定

まずは最終的な詳細設定値からご覧ください。

基本的に設定値は CPUコア数Memory に応じ計算することとなります。
尚、本記事に掲載する情報は CPU 20 core 、 Memory 24 GB の gw 環境における設定値を掲載しております。

apache 公式での設定指標や情報サイトで収集した内容をまとめましたので、みなさんの使用中のサーバスペックをベースに以下の計算式を参考に設定値を計算してください。

MaxRequestWorkers (最大同時リクエスト数)( apache2.4 以前は MaxClients )

MaxRequestWorkers = ( 総メモリ量 – システム全体の消費メモリ量 ) / ( Apache 1プロセスあたりの消費メモリ量 )

ServerLimit (子プロセス数の設定可能な上限値)

MaxRequestWorkers と同数値

StartServers (最初に起動する子プロセスの数)

apache service 起動時に生成される子サーバプロセス数 の default 数を設定します。
プロセス数は負荷に応じて動的に増減しますが、プロセス生成にかかる負荷を減らしたい場合はこの数値を大きくする等調整しましょう。

大きな数値を設定する場合それに応じたメモリ消費がされますため、実際に設定して server にかかる負荷を確認することを推奨します。

尚、本記事における設定値は、突発的に同時アクセスが平常時より増えた場合でも対応できるよう数値を default より少し大きめに設定しております。

ThreadLimit ( 子プロセス毎のスレッド数( ThreadsPerChild )の設定可能な上限値 )

MaxRequestWorkers ≦ ServerLimit × ThreadLimit
※ ServerLimit と ThreadLimit を掛けた数値が MaxRequestWorkers より大きくなるように設定してください。

ThreadsPerChild (子プロセスそれぞれに生成されるスレッド数)

ThreadLimit と同値

MinSpareThreads (アイドル状態のスレッド最小数)

ThreadsPerChild の整数倍にする

MaxSpareThreads (アイドル状態のスレッド最大数)

ThreadsPerChild の整数倍にする

MaxConnectionsPerChild( 子プロセスが稼働中に扱うリクエスト数の上限 )

apache2.4 以前は MaxRequestsPerChild というパラメータです。

1プロセスあたりのメモリ消費量を元に、常時稼働していて問題ない数を設定しましょう。
プロセスのメモリ消費量を確認したい場合は以下のコマンドを gw サーバで実行し、動作を監視してみてください。

まとめ

基本的にデフォルトでも問題なく稼働しますが、よりよいパフォーマンスを発揮させるには、自身の環境に応じた適切な設定を行うと良いですね。

自動計算ツールがいくつも無料配布されておりましたので、計算が大変な時は頼ってみてもいいかもしれません。
計算ツールまとめの記事

それでは本記事はこれにて終了となります。
いかがでしたでしょうか。

ご活用いただけますと幸いです。

Serverカテゴリの最新記事