NginxとPHPの結合:php-fpmの最適化でサーバーパフォーマンスを改善しよう
NginxでPHPを利用する際には、php-fpmを利用することが常識となっています。しかし、php-fpmの設定はサーバーのパフォーマンスを大きく影響するため、最適化が重要です。
この記事では、php-fpmの設定を最適化するための基本とテクニックを解説します。
php-fpmの役割と特徴
WordPressなどの動的サイトでは、Webサーバーがクライアントからのリクエストを受け取ると、サーバー上でPHPを実行し、動的にページを生成します。
php-fpmは、この動作を支援するプロセス管理システムです。リクエストのたびにプロセスを生成するのではなく、あらかじめ複数のワーカープロセスを起動しておき、これを使用してリクエストを処理します。このプロセスの集まりを「プール」と呼びます。
プロセスの数はサーバーの同時接続可能数やCPUやメモリなどのリソース使用量に影響を与えます。たくさんのプロセスが起動されていれば同時に多くの接続を処理できますが、リソース消費も増大します。
プロセス数の制御モード
php-fpmは、プロセスの起動方式をモードに展開して採用できます。
定数起動モード(static)
プロセス数を定数に保つ起動しておきます。プロセスの起動に伴うオーバーヘッドがないので、高い接続位置を磨りにくくします。
動的変化モード(dynamic)
通常時は一定数のプロセスを起動しておき、同時接続数が増えてプロセスが足りなくなったときだけ、設定範囲内で追加起動されます。
php-fpmの設定を最適化する
php-fpmの設定を調整することで、サーバーのピーク性能を最大化しながら、通常時のメモリ消費を抑えることができます。
設定ファイルは、/etc/php-fpm.d 配下にあります。サーバーによってファイル名が異なるので、適当に読み替えてください。
プロセスの最大起動数(pm.max_children)
同時に起動できるプロセスの最大数を指定します。この数値が、サーバーの同時接続可能数を決定します。staticモードの場合、定数でこの数値のプロセスを起動します。この数値を超えた同時接続があると、残りのリクエストは際宜処理されるので、レスポンスタイムが悪化します。
ただし、この数値を無関に増やすのは禁物です。CPUのコア数を超えるプロセス数を起動しても同時実行できず、めったにメモリ消費が増大したときはswap領域を使い、逆効果となります。
最適な値の求め方
pm.max_childrenは、最もボトルネックとなっているリソースに合わせて決定します。例えば、一プロセスあたりのCPUコア数やメモリ使用量をベースに計算します。直接調べるには、ps コマンドを使うと確認できます。
今回の例ではCPUコア数2に対応して、pm.max_children = 2と設定しました。同時に、プロセス制御はstaticを使用します。
vi /etc/php-fpm.d/www.conf
# 設定例
pm = static
pm.max_children = 2
これを修正したら、Nginxとphp-fpmを再起動します。
systemctl restart nginx
systemctl restart php-fpm
おわりに
php-fpmの設定は、サーバー性能に直結する重要な要素です。この設定を適切に調整することで、ウェブサイトの高速化とリソースの有効利用が可能になります。
この記事が役に立ったと思ったら、是非「スキ」をして応援してください!