1 of 42

PHPのプロファイリング�[第95回PHP勉強会]

石黒 瑞樹

2015/10/28

2 of 42

目 次

  • 自己紹介

  • 概要

  • キッカケ

  • 調査開始

  • プロファイリングツール

1

3 of 42

1. 自己紹介

2

4 of 42

石黒 瑞樹

PHPエンジニアです。

  • 会社:GMOリサーチ株式会社(ここの上)
  • 仕事:リサーチ・ソリューション・プラットフォーム開発
  • PHP暦:5年半
  • 好きなバイク:SUZUKI RF
  • 好きな島:徳之島
  • 英語勉強中
    • CakePHP3翻訳会にも参加してます(https://www.facebook.com/groups/transcake/

3

5 of 42

2. 概要

4

6 of 42

概要

  • あるキッカケから、PHPプログラムの速度調査を行なった
  • その際、PHPプロファイラを使った
  • 意外と情報が少なく、短期間に色々なツールを使ったので、それを共有したい

以上

5

7 of 42

3. キッカケ

6

8 of 42

とあるWebページ

ユーザーから「遅い!」の声

7

9 of 42

とあるWebページ

ユーザーから「遅い!」の声

スピードアップをしよう!

8

10 of 42

とあるWebページ

ユーザーから「遅い!」の声

スピードアップをしよう!

PHP側からの観点で�時間が掛かっている箇所を調査

9

11 of 42

4.調査開始

10

12 of 42

まず

どこが遅いか

11

13 of 42

まず

どこが遅いか

  • 利用者からヒアリング

12

14 of 42

まず

どこが遅いか

  • 利用者からヒアリング
  • 実際に自分で画面を操作して体感

13

15 of 42

まず

どこが遅いか

  • 利用者からヒアリング
  • 実際に自分で画面を操作して体感

→割と遅いし、表示回数も多いページに当たりをつけて調査

14

16 of 42

仮説

SQLが遅いんじゃ?

15

17 of 42

仮説

SQLが遅いんじゃ?

  • CakePHPのsql_dumpエレメントで確認�※デバッグレベル2で出るやつ

16

18 of 42

仮説

SQLが遅いんじゃ?

  • CakePHPのsql_dumpエレメントで確認

17

19 of 42

仮説

SQLが遅いんじゃ?

  • CakePHPのsql_dumpエレメントで確認

(ms)

18

20 of 42

結果

SQLが遅いんじゃ?

19

21 of 42

結果

SQLが遅いんじゃ?

安心して下さい、

20

22 of 42

結果

SQLが遅いんじゃ?

安心して下さい、

 早いですよ。

21

23 of 42

それなら

PHPのプロファイラを用いて、�さらに詳しく調査してみよう!

22

24 of 42

5.プロファイリングツール

※本題

23

25 of 42

結論ファースト

xhgui + uprofiler がおすすめ� (UI) (プロファイラ)

そのほかにも以下のようなツールが存在

UI:PhpStorm, webgrind, uprofiler

プロファイラ:xhprof, xdebug

24

26 of 42

xhguiとは

プロファイラ(xhprof、uprofiler)の

データを良い感じに見せてくれるGUI

25

27 of 42

こんなグラフを生成してくれます

26

28 of 42

こんなグラフを生成してくれます

単体で時間を要している関数

単体でメモリ利用の多い関数

27

29 of 42

こんなグラフも生成してくれます

28

30 of 42

こんなグラフも生成してくれます

関数配下を含めた実行時間

ぐりぐり動く

29

31 of 42

こんなグラフで比較分析

30

32 of 42

こんなグラフで比較分析

ある関数の日別の実行時間

日別のメモリ使用量

31

33 of 42

インストール方法

よきにはからってください

※インストール方法の情報は日本語でたくさんある…

32

34 of 42

ハマりポイント①

xdebugとPhpStormの組み合わせ

時の運により、プロファイルが読み込めない事態が発生

33

35 of 42

ハマりポイント②

xhprofはPHP5.5で動作しない!?

34

36 of 42

ハマりポイント②

xhprofはPHP5.5で動作しない!?

謎の???_op@n

35

37 of 42

36

38 of 42

37

39 of 42

 今のバージョンのxhprofは、

 PHP5.5で全然使えねーよ※意訳

  ※代わりにuprofilerが使えるよ

38

40 of 42

ハマりポイント終わり

39

41 of 42

まとめ

  • インストール方法は、多くのブログなどで紹介されていた
  • 今回は、最終的にxhgui + uprofilerに行き着いた
  • このようなプロファイリング方法が参考になれば

40

42 of 42

ご清聴ありがとうございました

41