Open1

PHP-FPMのプロセスとサーバーリソースの関係まとめ

masato sakadumemasato sakadume

PHP-FPMのプロセスとサーバーリソースの関係まとめ

1. PHP-FPMのプロセスとは

基本概念

PHP-FPMにおける「プロセス」は、PHPスクリプトを実行するための独立した実行単位です。

プロセスの種類

  • マスタープロセス: 全体の管理役(常に1つ)
    • 設定ファイルの読み込み
    • ワーカープロセスの起動・終了制御
    • ワーカープロセスの健全性監視
  • ワーカープロセス: 実際にPHPスクリプトを実行(複数存在)

2. プロセス管理方式

3つの管理方式

方式 特徴 適用ケース
static ワーカープロセス数が常に固定 高トラフィックで安定したアクセスがあるサイト
dynamic 負荷に応じて動的に増減 アクセス数に波がある一般的なWebサイト
ondemand リクエスト時のみ起動 アクセスが非常に少ないサイト、開発環境

選択の目安

  • メモリに余裕があり、パフォーマンス重視 → static
  • 一般的なWebサイト → dynamic
  • リソース節約重視 → ondemand

3. メモリ使用量の特性

プロセスあたりのメモリ使用量

実行する処理内容によって大きく変動:

  • シンプルなHTML出力: 数MB
  • WordPress通常ページ: 30-50MB
  • データベース大量取得: 80-100MB
  • 画像処理: 150-200MB以上

メモリの保持特性

重要: PHP-FPMのワーカープロセスは、一度確保したメモリをリクエスト終了後も保持し続ける傾向があります。

4. サーバーリソースとの関係

CPU

  • 1プロセスは1つのCPUコアしか使えない
  • 推奨プロセス数 = CPUコア数 × 2〜3(I/O待機を考慮)

メモリ

  • 各プロセスは独立したメモリ空間を持つ
  • 総メモリ使用量 = プロセス数 × 1プロセスあたりのメモリ

ストレージ

  • セッションファイル、ログファイル、一時ファイルで関連
  • 直接的な関係は薄い

5. Swapの仕組みと問題

Swapとは

物理メモリ(RAM)が不足した時に、ストレージの一部をメモリの代わりとして使用する仕組み

発生条件と問題点

正常時: 物理メモリのみ使用 → 高速
メモリ不足: Swap使用開始 → 10-20倍遅くなる
Swap満杯: OOM Killer発動 → プロセス強制終了

パフォーマンスへの影響

  • メモリアクセス: ナノ秒
  • SSD Swap: マイクロ秒(1000倍遅い)
  • HDD Swap: ミリ秒(100万倍遅い)

6. 実践的な設定と対策

メモリ計算の例

サーバーメモリ: 8GB
- OS・他サービス用: 2GB
- PHP-FPM用: 6GB
- 1プロセス100MB想定
→ 最大プロセス数 = 60個 × 0.8(安全率)= 48個

処理別の最適化

# 通常Web表示用
[www]
pm = dynamic
pm.max_children = 20
php_admin_value[memory_limit] = 128M

# 重い処理用(CSV出力等)
[heavy]
pm = dynamic  
pm.max_children = 5
php_admin_value[memory_limit] = 512M

バッチ処理の分離

# CLIで実行(PHP-FPMを通さない)
php -d memory_limit=1G /path/to/batch.php

7. 監視とチューニング

監視すべき項目

  • メモリ使用率(80%超えたら要注意)
  • CPU使用率とload average
  • Swap使用量(使い始めたら警戒)
  • レスポンスタイム
  • エラー率(502/503)

ベンチマークツール

# 負荷テスト
ab -n 1000 -c 50 http://your-site.com/

# プロセスメモリ監視
ps aux | grep php-fpm

# PHP-FPMステータス
curl http://localhost/php-fpm-status

8. トラブル時の対処

Swap使用時

  1. PHP-FPM再起動でメモリ解放
  2. プロセス数を減らす
  3. memory_limitを下げる

OOM Killer発動時

  1. 緊急: サービス停止してメモリ解放
  2. 短期: 設定値の見直し
  3. 長期: メモリ増設またはスケールアウト

9. ベストプラクティス

設定の原則

  • 小さく始めて徐々に調整: 本番環境では控えめな設定から開始
  • 処理の性質で分離: 軽い処理と重い処理でプール分け
  • 継続的な監視: アクセスパターンの変化に対応
  • Swapは使わない前提: Swap常用は設定見直しのサイン

最適な状態の目安

  • CPU使用率: 50-70%
  • メモリ使用率: 60-80%
  • Swap使用: 0GB(理想)
  • レスポンス: 安定して1秒以内