【FrankenPHP】様々なプロファイリングツールを試してOpenTelemetryに至るまでの記録
概要
こんにちは、Booostのバックエンドエンジニアのma_meです。
きたるPHPカンファレンス関西2025に向けて、
個人の開発環境でバリバリパフォーマンス検証&チューニングをぶん回しています(宣伝)
今回はそのなかでFrankenPHPの環境下において、導入を試行錯誤したプロファイリングツールについて共有します。
FrankenPHPは、ApacheやNginxでよく採用されるNTS(Non-Thread-Safe)ではなく、
ZTS(Zend Thread Safe)、つまりマルチスレッド形式で動作します。
このため、パフォーマンスプロファイリングツールを選定する上で、ZTS環境を公式にサポートしている必要がありました。
FrankenPHPで試したプロファイリングツール
以下のツールを検証しました
- Tidewaysの「The 6 Best PHP Profilers」に掲載されているツール群
https://tideways.com/the-6-best-php-profilers - New Relic
- Datadog
- OpenTelemetry
⭕先に結論: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
Zend Thread Safety
PHP builds that are compiled with Zend Thread Safety (ZTS) are not supported.
Blackfire
Requirements
PHP Non-Thread Safe (NTS) only
❌ドキュメントに記載は無いも、動作しない
Xdebug
デバッグは動作するも、プロファイリングは動作せず…
XHProf
ドキュメントに特に表記は無いものの、動作せず…
ZTS対応のXHProf_tidewaysはすでにアーカイブされていたため、利用を断念。
本筋とは関係ないですが、一度開発が終了した後もいろんな開発者のフォークを通じて、今でも現役で稼働するものになっていました。
Excimer
ドキュメントが難しすぎて、導入自体を断念...
❌サポートしているが、懸念事項あり
まだベータ版
php-spx
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
Both NTS (non-thread safe) and ZTS (Zend Thread Safety) builds of PHP are supported.
こちらもZTSもサポートしてくれているものの、$109/月 が必要。
まとめ
FrankenPHPのZTS環境において、安定して動作し、かつコスト面でも導入しやすいパフォーマンスプロファイリングツールとして、OpenTelemetryが最適な選択でした。
とはいえ有料ツールの豊富な機能にあやかれない部分もあるので、
FrankenPHPの普及に伴い、ZTS対応のプロファイリングツールが増えることを期待しています。
Discussion