Suhosinパッチを使用した長期実行CLIアプリケーション

Suhosin パッチの弊害は、PHP エージェントが長期実行 CLI アプリケーションのクリーンアップを保証しないことです。

PHPにSuhosinパッチがある場合、長時間実行されているアプリケーションではリソースが解放されない場合があります。したがって、アプリケーション自体が明示的にこれらのリソースを解放しない場合、メモリリークが発生する可能性があります。

long-running-cli 機能は、次の両方の条件が存在する環境で PHP アプリケーションを保護します。

  • Suhosin パッチを使用する PHP が Debian または Ubuntu で実行されている。Debian および Ubuntu の PHP では一般的にこのパッチが使用されています。この機能は、Suhosin 拡張機能(パッチとは異なります)のみを使用する PHP には必要ありません。一部の PHP では、拡張機能とパッチの両方が使用されていることに注意してください。
  • PHP エージェント API を使用し、同じプロセスで実行する複数のアンバインドされたビジネストランザクションを持つ CLI アプリケーションをインストゥルメント化している。

長期実行CLI機能の仕組み

インストール時にインストーラが、PHP に Suhosin パッチがあり、CLI が有効(agent.cli_enabled=1)であると判断すると、インストーラオプションの値によって次の結果になります。

  • true の場合は、致命的なエラーが発生し、インストーラが終了します。オプションが設定されている場合、インストーラはSuhosinパッチを使用したPHPインストール時に長期実行CLIアプリケーションのインストゥルメント化を拒否します。
  • false の場合(デフォルト)は、インストールは続行し、長期実行 CLI プロセスにおいてメモリリークが発生する可能性を警告します。

インストーラがPHPにSuhosinパッチがないと判断した場合、インストールは続行します。Suhosinパッチがないため、長時間実行するCLIプロセスはエージェントによりサポートされます。

エージェントがインストール時に PHP に Suhosin パッチがあるかを判断できず、実行時にパッチを検出する場合、インストーラオプションを「true」に設定しておくと、長期実行のものだけでなくすべての CLI プロセスのインストゥルメント化が行われません。これによりSuhosinがパッチされたPHPが終了するのを回避できます。

CLI が有効になっていて、Suhosin パッチの検出が原因でインストーラが終了しなかった場合、Splunk AppDynamics では、enable-cli-long-running オプション(シェル スクリプト インストールの場合)または APPD_CONF_CLI_LONG_RUNNING_ENABLED 環境変数(RPM インストールの場合)をそれぞれ true に設定してエージェントをインストールすることを推奨しています。これによりパッチが実行時に検出された場合にもPHPは保護されます。

アプリケーションの CLI 部分がインストゥルメント化されない場合(インストーラが Suhosin パッチを検出したため)は、PHP ini ファイルの agent.cli_long_runningoff に設定すると、このオプションをオフにできます。また、インストーラを使用して再インストールすることもできます。