これはなに
Docker上で動くWordPressに、PHPのプロファイリングツールであるTidewaysをインストールした時のメモ。
WordPressの独自テーマプロジェクトのことを書いているが、(読み替えれば)通常のPHPプロジェクトでも同じようにインストールできるはず。
背景
PHPゴリゴリのWordPress独自テンプレートのパフォーマンスチューニングをする機会があった。
プロファイラを使ってボトルネックを調査しようと思いツールを調べたところ、PHPではTidewaysというものがメジャーなもよう。
Docker上で動くWordPressでTidewaysのレポートを出力できたので、方法をメモしていく。
ポイント
- グラフを出力するためにgraphvizをインストール
- xhprofをビルド
-
/var/www
にtidewaysの管理画面(xhprof-html)をホスト
使い方
1. 解析したいPHPコードを次のコードで囲む
tideways_xhprof_enable();
// ここに解析したいメインの処理
$data = tideways_xhprof_disable();
$filename = '/tmp/xhprof/' . intval(microtime(true)) . mt_rand(1, 10000) . '.xhprof';
file_put_contents($filename, serialize($data));
2. PHPを実行し、解析ファイルを作成する
(1)のPHPを実行すると、/tmp/xhprof
に解析ファイルが生成できる。
3. xhprof-htmlで可視化する
ホストしたxhprof-htmlにアクセスし、(2)で作成したxhprofファイルを選択してパフォーマンスを確認
↓からアクセスできる
http://localhost:8000/xhprof/?dir=/tmp/xhprof
構築方法
WordPressの独自テーマプロジェクトのため、
direnvでテーマのディレクトリへのパスを設定した。
export THEME_REPO=~/path/to/my-theme
version: '3'
services:
db:
image: mysql:5.7
platform: linux/x86_64
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
build:
dockerfile: wordpress/Dockerfile
platform: linux/x86_64
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DEBUG: true
volumes:
- ${THEME_REPO}:/var/www/html/wp-content/themes/my-theme
volumes:
db_data:
すごい雑だがtidewaysのインストールをDockerfileにて定義している。
FROM wordpress:latest
RUN apt-get update && apt-get install wget git graphviz -y
RUN cd /tmp && git clone https://github.com/tideways/php-xhprof-extension
RUN cd /tmp/php-xhprof-extension && phpize && ./configure && make && make install
RUN echo 'extension=tideways_xhprof.so' >> /usr/local/etc/php/conf.d/tideways.ini
RUN echo 'tideways.auto_prepend_library=0' >> /usr/local/etc/php/conf.d/tideways.ini
RUN mkdir /tmp/xhprof && chmod 777 /tmp/xhprof/
COPY wordpress/xhprof-html.conf /etc/apache2/conf-enabled/xhprof-html.conf
RUN cd /var/www && git clone https://github.com/sters/xhprof-html.git
WordPressの公式イメージに同梱しているApacheにのっかって管理画面をホストしているけど、Nginxに読み替えてOK。
↓ホスト用のApache設定ファイル
<IfModule alias_module>
Alias /xhprof /var/www/xhprof-html
</IfModule>