Skip to content

Instantly share code, notes, and snippets.

@co3k
Created June 30, 2010 13:13
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save co3k/458621 to your computer and use it in GitHub Desktop.
Save co3k/458621 to your computer and use it in GitHub Desktop.

XHProf 導入

はじめに

PHP アプリのボトルネックの分析に XHProf を使う。

XHProf は PECL 拡張として提供されている。

インストール

XHProf のパッケージをダウンロードし、ビルドしてインストールする (pecl コマンド経由のインストールには失敗する)。

基本的には http://mirror.facebook.net/facebook/xhprof/doc.html の手順どおりに実施すればインストールできる。

まず、 http://pecl.php.net/package/xhprof から最新版のパッケージファイルを入手し、展開する:

$ cd /path/to/directory
$ wget http://pecl.php.net/get/xhprof-0.9.2.tgz
$ tar xvf xhprof-0.9.2.tgz

ビルドをおこなうためのファイル群は、展開後のディレクトリの、 extension ディレクトリに格納されているので、そのディレクトリまで移動して phpize コマンドを実行する:

$ cd /path/to/xhprof-root/extension
$ phpize

php-config のバイナリ (php.ini ではない) のパスを configure オプションに指定したうえでビルドをおこなう:

$ ./configure --with-php-config=/path/to/php-config
$ make
# make install

php.ini を設定し、 XHProf を有効にする。また、ここで、 XHProf のプロファイル結果の出力先を指定する必要がある。 XHProf のプロファイル結果を Web インターフェース等から閲覧する場合、ファイルとして出力されたプロファイリング結果が必要となる。以下に、 php.ini の設定例を示す (以下の例では /tmp 以下にプロファイル結果を出力する):

[xhprof]
extension=xhprof.so
xhprof.output_dir=/tmp

XHProf が正しくインストールされているかどうか、以下のコマンドを実行して確認する:

$ php -m | grep "xhprof"
xhprof

プロファイル結果閲覧用 Web インターフェースの設置

プロファイル結果閲覧用 Web インターフェースは、 XHProf のパッケージに付属している。 xhprof_html ディレクトリ以下のファイルと、 xhprof_lib 以下のファイルである。

xhprof_html と xhprof_lib のディレクトリの構成は動かすことができないので、 Apache のドキュメントルートとして xhprof_html ディレクトリを設定したり、シンボリックリンクを貼るなどして、 xhprof_html ディレクトリ以下をそのまま公開ディレクトリとするのがよい。

準備が整ったら、ブラウザから xhprof_html ディレクトリ内の index.php にアクセスしてページが表示されることを確認する。

プロファイリング用フロントコントローラの設置

OpenPNE3 にプロファイリング用のフロントコントローラを追加する。このフロントコントローラにアクセスした場合のみ、 XHProf のプロファイリングをおこなう。

プロファイリング用フロントコントローラのサンプルは、 http://gist.github.com/412924 から入手することができる。

まず、 OpenPNE3 の web ディレクトリにこのサンプルを設置する:

$ curl "http://gist.github.com/raw/412924/prof.php" > /path/to/OpenPNE3/web/prof.php

設置したフロントコントローラ内の、 $PROF_URL と $XHPROF_ROOT を環境にあわせて書き換える。 Web インターフェースをブラウザで閲覧するための URL を $PROF_URL に、 XHProf のルートディレクトリまでのパスを $XHPROF_ROOT に設定する。

設定が完了したら、このフロントコントローラに対してブラウザからアクセスすると、ページの最下部に以下のような文字列が出力される:

---------------
Assuming you have set up the http based UI for
XHProf at some address, you can view run at
http://example.com/xhprof/index.php?run=xxxxx&source=xxxxx
---------------

この文字列中の URL に対してアクセスすると、このリクエストのプロファイル結果を閲覧することができる。

@co3k
Copy link
Author

co3k commented Oct 3, 2011

非常にいまさらですがこのドキュメントは AS-IS で提供していてアップデートの予定もないです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment