現在位置: ホーム / 技術サポート情報 / MIRACLE ZBX 4.0 技術情報 / MIRACLE ZBX 4.0 サポート関連情報 / php-fpmのメモリ使用量が増加する問題について

php-fpmのメモリ使用量が増加する問題について

php-fpmのメモリ使用量が増加する問題について

概要

MIRACLE ZBX Webフロントエンドが動作するPHP環境としてphp-fpmを使用している環境では、使用しているPHPのバージョンやphp-fpmの設定内容によってphp-fpmプロセスのメモリ使用量が増加し、システムに支障をきたす場合があります。php-fpmのメモリ使用量が増加する問題について原因と対策を解説します。

影響を受ける環境

MIRACLE ZBXアプライアンス製品では、以下のバージョンが影響を受けます。

  • MIRACLE ZBX Virtual Appliance V5.0

MIRACLE ZBXパッケージを使用して構築している場合、以下のバージョンが影響を受ける可能性があります。

  • MIRACLE ZBX 5.0
  • MIRACLE ZBX 4.0(MIRACLE LINUX 8系OSを使用している場合のみ)

問題の詳細

php-fpmのメモリ使用量が増える原因として以下の2つがあります。

  • PHPのメモリリーク
  • 解放されずに残ったオブジェクト

PHPのメモリリーク

使用しているPHPのバージョンによってはメモリリークの不具合の影響を受ける可能性があります。例えば、MySQLiやMySQLndモジュールについて以下のようなメモリリークの不具合が報告されています。

解放されずに残ったオブジェクト

PHPのメモリ管理の仕組み上、処理が完了してもオブジェクトに割り当てられたメモリが解放されず、ガベージコレクション機構によって後からメモリが解放されることがあります。そのため、ガベージコレクションが動作するまでの間、php-fpmプロセスのメモリ使用量が増加します。

PHPのガベージコレクションについては、公式ドキュメントのガベージコレクションを参照してください。

対策

php-fpmプロセスのメモリ使用量が増加する問題への対策として、次の2点を実施してください。

  • PHPパッケージのアップデート
  • php-fpmプロセスの設定変更

PHPパッケージのアップデート

メモリリークなどの不具合が修正されているバージョンを使用するため、PHPパッケージをアップデートする必要があります。OSがサポートしている最新バージョンを使用することを推奨します。MIRACLE LINUX8系OSではPHP 7.4、MIRACLE LINUX 7系OSではSoftware CollectionsのPHP 7.3が最新バージョンとなっています。詳細についてはパッケージ提供元に確認してください。

パッケージのアップデート手順について、MIRACLE ZBX Virtual Appliance V5.0を使用している場合はMIRACLE ZBX Virtual Appliance V5.0でのPHPのアップデートについてを参照してください。その他の環境を使用している場合はパッケージ提供元に確認してください。

php-fpmプロセスの設定変更

PHPの仕様を考慮すると、問題の2つ目の原因として挙げている解放されずに残るオブジェクトによってメモリ使用量が増加する事象については根本的に解決することができません。php-fpmプロセスの設定を変更してシステム全体への影響を低減することが問題への対策となります。

設定変更の内容として次の2点が挙げられます。

  • php-fpmのプロセス数の制限
  • php-fpmのプロセス再起動
php-fpmのプロセス数の制限

php-fpmは多数のリクエストを処理するために複数プロセスで動作するようになっています。このプロセス数を少なくすることにより、プロセス1つあたりのメモリ使用量が増加してもphp-fpm全体としてのメモリ使用量を抑えることができます。

設定ファイル/etc/php-fpm.d/zabbix.confを編集しpm.max_childrenの値を変更してください。使用環境によって適正な値は変わるため、環境に合わせて設定値を調整してください。例として、プロセス数の上限を5に設定する場合は以下のようになります。

pm.max_children = 5
php-fpmのプロセス再起動

解放されずに残ったオブジェクトに割り当てられたメモリはガベージコレクションによって解放されますが、ガベージコレクションが動作するのを待たずにphp-fpmのプロセスを再起動することを推奨します。

ガベージコレクションは頻繁に動作するものではないため定常的にメモリ使用量を小さくできるわけではなく、動作する際に負荷が高くなる可能性があるためです。また、MIRACLE ZBX Webフロントエンドに割り当てられるメモリはそれほど多くないという事情を考慮すると、ガベージコレクションが動作するよりも先にメモリ不足による実行時エラーが発生する可能性もあります。

php-fpmプロセスを定期的に再起動するには、設定ファイル/etc/php-fpm.d/zabbix.confを編集してpm.max_requestsを設定してください。このパラメーターを設定すると、指定された回数だけリクエストを処理した後にプロセスを再起動するようになります。使用環境によって適正な値は変わるため、環境に合わせて設定値を調整してください。例として、リクエストを500回処理した後にプロセスを再起動する場合は以下のようになります。

pm.max_requests = 500

注意事項

  • 本ドキュメントの内容は、予告なしに変更される場合があります。
  • 本ドキュメントは限られた評価環境における検証結果をもとに作成しており、 全ての環境での動作を保証するものではありません。
  • 本ドキュメントの内容に基づき、導入、設定、運用を行なったことにより損害が生じた場合でも、弊社はその損害についての責任を負いません。あくまでお客様のご判断にてご使用ください。

更新履歴

  • 2022年01月31日 新規作成
MIRACLE ZBX サポートRSS

アップデート情報RSS

サポート関連情報RSS