質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Q&A

解決済

1回答

1434閲覧

Apacheのチューニングについて

sasaki0628

総合スコア106

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

0グッド

1クリップ

投稿2023/01/27 09:10

CentOS Stream 9
Apache/2.4.53

以下のサイトを参考にApacheのチューニング設定を行いましたが、サイトごとに説明が異なっている箇所があり自信がありません。

https://httpd.apache.org/docs/2.4/ja/mod/mpm_common.html
https://qiita.com/rryu/items/5e02ea60e36d7fd956b8
https://techmania.jp/blog/server0004/
https://www.miraclelinux.com/support/zbx-appliance/zbx-appliance-support/php-fpm-memory-problem
http://performance.oreda.net/middleware/web/apache-mpm

設定した /etc/httpd/conf.modules.d/10-mpmevent.conf の内容

<IfModule mpm_event_module> ServerLimit 4 StartServers 2 MinSpareThreads 32 MaxSpareThreads 48 ThreadLimit 16 ThreadsPerChild 16 MaxRequestWorkers 64 MaxConnectionsPerChild 16 </IfModule>

ServerLimit
httpdが使用できる総メモリ量は約400MBであり、1つのhttpdの子プロセスのメモリ使用量を計測したところ約100MBのため、「ServerLimit」は「4」にしました。

StartServers
サーバーのCPUのコア数が「2」のため、「StartServers」も「2」にしました。

MaxRequestWorkers
最大で64リクエストくらいは耐えられるのではないかと思い、「64」にしました。

ThreadLimit
(MaxRequestWorkers / ServerLimit)の値にしました。

MaxConnectionsPerChild
「MaxConnectionsPerChild」の適切な値がわかりません。ひとつの Connection で ひとつの Thread を使用すると認識しており、ThreadLimit と同じ値にしたのですが、間違っているしょうか。16にするとすぐに子プロセスが破棄されそうで不安です。しかし16より大きい値にするとプロセス全体で(4×16=64の値を超えるので) MaxRequestWorkers の値を超えてしまうのではないかと気にしています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2023/01/27 10:31

そのチューニングほんとに必要ですか?
sasaki0628

2023/01/27 14:13

必要です。メモリが足りないので正確に理解をしてチューニングをしたいです。Apacheの他にもMariaDBやバックエンド、フロントエンドの全てのメモリリークを修正しています。
guest

回答1

0

ベストアンサー

MaxConnectionsPerChild は、プロセスを自動的に再起動させるための設定です。

チューニングされているシステムの事がわからないと、答えようがない、という感じがしますので、一般論になっちゃいますが、一般的には、ある程度大きい値にするか、0を設定して無効化するというのが、多いんじゃないでしょうか。

この値が少ないと、わりと早くプロセスが殺されて、値が大きいほど、プロセスは長生きします。プロセスが殺されたあとは、自動的に新しいプロセスが立ち上がります。

コレがどのような効果があるかというと、プロセスがメモリリークを起こした際に、正常化するには、プロセスを再起動するしかありません。

このパラメータを設定していれば、自動的にプロセスは停止され、その後、自動的にプロセスが立ち上がってきますので、メモリリークの被害を減らし、また、復旧を自動化出来るという意味があります。

プロセスの起動は、負荷が高いので、この機能を使うことで、処理性能が下がる要因になりかねません。

また、そもそもメモリリークが起きなければ、設定している意味はないので、どんな値にしても性能に影響しない可能性もあります。

なので、無停止前提のサーバーで、メモリリークが怖いなら有効にするのもありですし、メモリリークは起こらない前提で良ければ無効にすればいいと思います。

投稿2023/01/31 22:22

take88

総合スコア1379

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sasaki0628

2023/02/01 08:32

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問