パラメータチューニング

課題~メモリ使用率が高い~

現在、t3a.smallを使っているのだが、WordPress管理画面がやたらと重い。
CloudWatchで使用メモリ率を確認すると、WordPressをいじっているときは90%を超えている。
作業時のみt3a.mediumにインスタンスタイプを変更しようかと思ったが、一人で使っている割に重すぎるのはおかしいと考え直しApacheのパラメータを見直してみることにした。

作業記録

StartServers               50
MinSpareServers            50
MaxSpareServers           100
ServerLimit               150
MaxRequestWorkers         150
MaxConnectionsPerChild  10000

これが現在のパラメータの値。
各項目が何を設定しているのか今一つ理解できていないので調べてみた。

項目詳細内容
StartServers起動時に生成される子プロセス。
MinSpareServersアイドル状態でいる子プロセスの最小値。これより少ない場合、1プロセス/秒のペースで新規に子プロセスを生成していく。
MaxSpareServersアイドル状態の子プロセスがこれを超えた場合、プロセスをkillしていく。
ServerLimitprefork MPMの場合、この値に意味はないらしく、MaxClientsと同じにするのが無難のようだ。
MaxRequestWorkers同時に接続できる最大数。
MaxConnectionsPerChildプロセスが指定した回数を受け付けたら終了する。メモリリークがあった場合でもこれを設定しておけばいつかメモリが解放される。

考察~各パラメータをいくつにすべきか~

まず、StartServers。これはデフォルトの5でよいだろう。自分ひとりで使うだけなので最悪低すぎることによっての問題はどうにでもなる。
続いてMinSpareServersとMaxSpareServers。
アイドル状態でいる子プロセス数はこの2つの間の数値内になるように調整されるわけだが、それぞれ50と100は多すぎる。
これがメモリ喰ってる可能性高いのでこれもデフォルトの値(MinSpareServersは5、MaxSpareServersは10)とする。
閲覧者が増えてきたら増やす必要もあるのかもしれないが現時点ではこれでいいだろう。
ServerLimitとMaxRequestWorkersも10としておく。デフォルトの256は多すぎる。
エラーでMaxに当たるようなことが増えるまではこのままでよいだろう。
MaxConnectionsPerChildは1000とした。
AWSの公式サイトでチューニング例が出ており、そこで1000を設定していたのでそれを採用した。

修正後パラメータ

StartServers                5
MinSpareServers             5
MaxSpareServers            10
ServerLimit                10
MaxRequestWorkers          10
MaxConnectionsPerChild   1000

暫くこの設定にして普段通りの作業をしてみたのだが、メモリ使用率は高い時で70%到達するかしないかぐらいにまでメモリ消費量を減らせた。
体感で大分WordPress管理画面が軽く感じる。
何か計測方法あればいいんだけどな、ベンチマーク的な。
時間あったら探してみよう。