2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

これはなに

Docker上で動くWordPressに、PHPのプロファイリングツールであるTidewaysをインストールした時のメモ。

WordPressの独自テーマプロジェクトのことを書いているが、(読み替えれば:innocent:)通常の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でテーマのディレクトリへのパスを設定した。

.envrc
export THEME_REPO=~/path/to/my-theme
docker-compose.yml
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設定ファイル

xhprof-html.conf
<IfModule alias_module>
    Alias /xhprof /var/www/xhprof-html
</IfModule>
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?