PHP-FPM メモリ割り当て調整

Table of Contents

使用メモリを環境に合わせて最適化
自分の体感のみだが速度が改善できたと思う

使用可能なメモリ量の把握

# free -h
              total        used        free      shared  buff/cache   available
Mem:          7.4Gi       1.6Gi       171Mi       198Mi       5.7Gi       5.3Gi
Swap:         7.8Gi       225Mi       7.6Gi

※ free(171Mi) + buff/cache(5.7Gi) = 約5.8G

他のサービスも稼働させるので、使用メモリを4Gに確定

PHPプロセスが確保している平均メモリ量の把握

全てのfpmプロセスが確保したメモリ量は以下のコマンドで確認できる

# ps -ylC php-fpm --sort:rss
S   UID     PID    PPID  C PRI  NI   RSS    SZ WCHAN  TTY          TIME CMD
S     0  175380       1  0  80   0 50612 163890 -     ?        00:00:00 php-fpm
S    48  176553  175380  0  80   0 93480 261392 -     ?        00:00:03 php-fpm
S    48  176554  175380  0  80   0 95632 262707 -     ?        00:00:03 php-fpm
S    48  175383  175380  0  80   0 99252 261922 -     ?        00:00:04 php-fpm
S    48  176490  175380  0  80   0 100124 262167 -    ?        00:00:03 php-fpm
S    48  175384  175380  0  80   0 112040 260907 -    ?        00:00:05 php-fpm
S    48  175382  175380  0  80   0 116784 280897 -    ?        00:00:04 php-fpm
S    48  175386  175380  0  80   0 119328 262413 -    ?        00:00:04 php-fpm
S    48  175385  175380  0  80   0 120348 261765 -    ?        00:00:04 php-fpm
S    48  175794  175380  0  80   0 125056 262724 -    ?        00:00:05 php-fpm
S    48  176533  175380  0  80   0 139308 273728 -    ?        00:00:03 php-fpm
S    48  176561  175380  0  80   0 155964 274322 -    ?        00:00:03 php-fpm

この平均を以下のコマンドで計算する

# ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'
108M

余裕をみて、125M

適切な設定値を計算

pm.max_children = 使用可能メモリ量 / プロセスの平均メモリ使用量
pm.start_servers = [25% of max_children]
pm.min_spare_servers = [25% of max_children]
pm.max_spare_servers = [75% of max_children]

pm.max_children = (4G * 1024) / 125M = 32.759 = 32
pm.start_servers = 32 × 0.25 = 8 = 8
pm.min_spare_servers = 32 × 0.25 = 8 = 8
pm.max_spare_servers = 32 × 0.75 = 24 = 24
# vi /etc/php-fpm.d/www.conf
----------------------------------------
[www]
pm.max_children = 32
pm.start_servers = 8
pm.min_spare_servers = 8
pm.max_spare_servers = 24
----------------------------------------

参考記事

【PHP-FPM】適切なプロセス設定について – とーますメモ
Nextcloud設定の勘所 – はてなの鴨澤

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です