💭

【FrankenPHP】様々なプロファイリングツールを試してOpenTelemetryに至るまでの記録

に公開

概要

こんにちは、Booostのバックエンドエンジニアのma_meです。
きたるPHPカンファレンス関西2025に向けて、
個人の開発環境でバリバリパフォーマンス検証&チューニングをぶん回しています(宣伝)
https://fortee.jp/phpcon-kansai2025/proposal/868f9f9d-4244-4743-93c2-03abb3525421

今回はそのなかでFrankenPHPの環境下において、導入を試行錯誤したプロファイリングツールについて共有します。
FrankenPHPは、ApacheやNginxでよく採用されるNTS(Non-Thread-Safe)ではなく、
ZTS(Zend Thread Safe)、つまりマルチスレッド形式で動作します。
このため、パフォーマンスプロファイリングツールを選定する上で、ZTS環境を公式にサポートしている必要がありました。

FrankenPHPで試したプロファイリングツール

以下のツールを検証しました

⭕先に結論:OpenTelemetryを採用しました

最終的には以下の理由で「OpenTelemetry」を採用しました。

  • マイクロサービスを前提に実装されているため、ZTS環境で安定動作する
  • オープンソースのため、スモールスタートで導入しやすい
  • コミュニティが活発で、Jaegerなど可視化ツールも豊富

ZTSは必須ですが、個人の開発環境で検証を回していることもあり、
スモールスタートで導入しやすい点も特に重要ポイントでした。

採用に至らなかったプロファイリングツール群

ここからは他のプロファイリングツールとZTS対応状況と、
採用に至らなかった理由を記載していきます。

ツール比較表

ツール名 ZTS対応 価格 備考
OpenTelemetry 無料(OSS) マイクロサービス対応、安定動作
New Relic - 公式に非サポートを表明
Blackfire - NTSのみサポート
Xdebug 無料(OSS) デバッグは動作、プロファイリングは動作せず
XHProf 無料(OSS) 動作せず、ZTS対応版はアーカイブ済み
Excimer 不明 無料(OSS) ドキュメントが複雑で検証断念
php-spx 無料(OSS) ベータ版、セグフォルトの可能性あり
Datadog $19~/月 ZTS対応(v0.99+)
Tideways $109~/月 フル機能でZTSサポート

採用に至らなかったプロファイリングツール群

❌ 公式に非サポートを表明

New Relic

https://docs.newrelic.com/docs/apm/agents/php-agent/getting-started/php-agent-compatibility-requirements/#zts

Zend Thread Safety
PHP builds that are compiled with Zend Thread Safety (ZTS) are not supported.

Blackfire

https://docs.blackfire.io/continuous-profiling-cookbooks/php#requirements

Requirements
PHP Non-Thread Safe (NTS) only

❌ドキュメントに記載は無いも、動作しない

Xdebug

デバッグは動作するも、プロファイリングは動作せず…

XHProf

ドキュメントに特に表記は無いものの、動作せず…
ZTS対応のXHProf_tidewaysはすでにアーカイブされていたため、利用を断念。

本筋とは関係ないですが、一度開発が終了した後もいろんな開発者のフォークを通じて、今でも現役で稼働するものになっていました。

Excimer

https://www.mediawiki.org/wiki/Excimer
ドキュメントが難しすぎて、導入自体を断念...

❌サポートしているが、懸念事項あり

まだベータ版

php-spx

https://github.com/NoiseByNorthwest/php-spx?tab=readme-ov-file#zts-php-multi-thread

Also, consider ZTS PHP support as still being in beta.

サポートしているものの、ベータ版の状態であること。
またセグメンテーションエラーを引き起こす可能性もあることが記載されていたため、利用を避けました。

❌ 料金面での懸念

Datadog

PHP ZTS builds are supported since dd-trace-php version 0.99+, while PHP debug builds are not supported.

ZTSをサポートしています!
しかしフリープランではプロファイリングはサポートしておらず、最低でも $19/月 が必要。

Tideways

https://support.tideways.com/documentation/compatibility-and-requirements.html

Both NTS (non-thread safe) and ZTS (Zend Thread Safety) builds of PHP are supported.

こちらもZTSもサポートしてくれているものの、$109/月 が必要。
https://tideways.com/profiler/pricing

まとめ

FrankenPHPのZTS環境において、安定して動作し、かつコスト面でも導入しやすいパフォーマンスプロファイリングツールとして、OpenTelemetryが最適な選択でした。
とはいえ有料ツールの豊富な機能にあやかれない部分もあるので、
FrankenPHPの普及に伴い、ZTS対応のプロファイリングツールが増えることを期待しています。

Booost

Discussion