読者です 読者をやめる 読者になる 読者になる

プログラミング - THIS IS IT !

より良い開発をすべく日々奮闘しているプログラマーです。設計やDDDに興味があります。主にPHPネタを書いてます。 Crocos Inc./日本Symfonyユーザー会

「Blackfire」というPHPプロファイラーが出たので使ってみた(最速レビュー)

php tool

Blackfireとは?

SensioLabsからリリースされた、PHPのプロファイリングツールです。 プロファイリング結果をブラウザ上で簡単に見ることができるようになります。

Blackfireのデモ動画

以前は「SensioLabsProfiler」と呼ばれており、サービスを出すとだけ告知されていたのですがようやく利用できるようになりました。

現在はbeta版として提供されていて、DebianRed HatベースのLinuxMac OSが対応しています。

利用するためには、Blackfileの「Join the beta」からSensioLabsConnectに登録する必要があります。

アーキテクチャ(ざっくり)

  • CompanionというChorome拡張を使ってプロファイリングを実行
  • ProbeというPHP extensionでアプリケーションのプロファイルを計測
  • blackfire-agentでプロファイル結果を集めてBlackfireサーバー側にデータを送信
  • プロファイラーで集めた結果をブラウザで確認する

セットアップ

インストール方法は、マニュアルのGetting Started に丁寧に書かれています。 こちらを見ることをおすすめします。

私はMacにインストールしたので、以下Macにインストールする場合の話をします。

Chrome拡張のインストール

利用可能なブラウザはChromeだけのようです。 Googole Chromeをインストールしてない人はまずインストールしてください。

Chrome 拡張機能の「Blackfire Companion」をインストールします。

blackfire-agentのインストール

手順はMacだと以下

$ brew tap blackfireio/homebrew-blackfire
$ brew install blackfire-agent

DebianRed Hat 向けのリポジトリもありますので各環境に合わせてインストールしてください。

続いてServer IdとServer Tokenを登録します。

以下のコマンドを実行します。

$ blackfire-agent -register

Server IdとServer Tokenは、Getting started のページに記載されているので、それを入力します。

f:id:okapon_pon:20141103203024p:plain

現在、1アカウントにつき1つのAgentしか登録できないようです。 ただし、Blackfire Accountページに「Register an Agent」ボタンがあるので将来的には複数agentを登録できるようになるのでしょう。

f:id:okapon_pon:20141103234655p:plain

blackfire-agent が自動起動するように登録します。

$ ln -sfv /usr/local/opt/blackfire-agent/*.plist ~/Library/LaunchAgents

今回は手動で起動

$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.blackfire-agent.plist

Probeのインストール

Probeのインストールは環境によってはちょっと面倒ですし、場合によっては利用さえできない可能性があります。

  • 現時点で、LInux環境ではPHP5.6に未対応
  • PHPのビルド時に、--enable-debug つけて有効化していると利用不可
  • XDebugXHProf を利用していると干渉するかも(確認していない)

「homebrew-phpを利用していれば特に問題ないよ」とは書かれてました。

ちなみに、私は--enable-debugとしてPHPをビルドしていたので、PHPをインストールし直しました。

ドキュメントにも書かれていますが、自前でビルドしたPHPMac標準のPHPを使う場合には、以下のコマンドを実行します。

$ brew install blackfire-php55 --without-homebrew-php

homebrew-phpでインストールしている場合には「--without-homebrew-php」を消すと付けずに実行します。

一応モジュールのインストールを確認

$ php -m | grep blackfire
blackfire

使い方

試しにSymfonyフレームワークのプロファイルを取ってみます。

プロファイリングしたいページにアクセスし「Blackfire Companion」の拡張ボタンをクリック。続いてprofileボタンをクリックします。

f:id:okapon_pon:20141103231921p:plain

プロファイリングの進行状況はページの上部に表示され、完了するとプロファイリング結果のページヘのリンクが表示されます。

f:id:okapon_pon:20141103233249p:plain

プロファイリング結果(profile-slots)のページへアクセスすると、コールグラフなどが表示されます。

f:id:okapon_pon:20141103233426p:plain

左側のメソッドと、右側のコールグラフが連動していて、右側のグラフをクリックするとその部分の詳細を見ていくことができます。 xhprofのコールグラフはあくまで画像として出力されるだけなので、リンクになっていて該当メソッドの場所にジャンプできるのは便利ですね。

f:id:okapon_pon:20141103233526p:plain

実行時間、ディスクI/O、使用メモリーの順で並び替えたり、コストの高いメソッドを抽出したりとボトルネックとなっている部分を探しやすいようになっています。

f:id:okapon_pon:20141104000951p:plain

既存のプロファイラーだと実行時間ぐらいしか見ることができなかったので、これはありがたいですね。

もう少し使いこんでみようと思います。