ホームページ  >  記事  >  バックエンド開発  >  Xdebug を使用して PHP プログラムを分析し、パフォーマンスのボトルネックを見つける [オリジナル]

Xdebug を使用して PHP プログラムを分析し、パフォーマンスのボトルネックを見つける [オリジナル]

WBOY
WBOYオリジナル
2016-06-23 13:23:14811ブラウズ

1. インストールと構成
1. PHP 用の XDebug 拡張機能を次の場所からダウンロードします。 0RC3 .gz
cd xdebug-2.0.0RC3
/usr/local/php/bin/phpize
./configure --enable-xdebug

cp modules/xdebug.so /usr/local/php/lib/php/extensions/ no -debug-non-zts-20020429/

注: /usr/local/php/lib/php/extensions/no-debug-non-zts-20020429/異なる PHP バージョンには異なるパスがあり、必ずしも必要ではありませんこのパスについては、zend_extension_ts 内の xdebug.so の場所を指定できます。


Quote

vi /usr/local/php/lib/php.ini



php.iniを変更し、PHPアクセラレーションモジュールを削除し、Xdebugをサポートするために次の構成情報を追加します]

zend_extension_ts= "/usr/local/php/lib/php/extensions/no-debug-non-zts-20020429/xdebug.so"



xdebug.profiler_enable=on xdebug .trace_output_dir="/tmp/xdebug"

    xdebug.profiler_output_dir="/tmp/xdebug"
  1. xdebug.profiler_output_name="script"
  2. Quote
  3. mkdir -p /tmp/ xdebug

    chmod 755 /tmp/xdebug

    chown www: www /tmp/xdebug
  4. /usr/local/apache/bin/apachectl -k restart
  5. 3.クライアント(Windows): WinCacheGrind
  6. ダウンロードアドレス: http://sourceforge.net/projects/wincachegrind/

    2分析プロセス
  7. 1. Web サイトにアクセスし、ホームページ上のさまざまなリンクをクリックします。 usr_local_apache_htdocs_app_play_php_cachegrind.out
usr_local_apache_htdocs_app_user_member_php_cachegrind.out

usr_local_apache_htdocs_tag_tag s_php_cachegrind.out
usr_local_apache_htdocs_top_top_php_cachegrind.out

2. 上記のファイルをWindowsにコピーし、クライアントソフトWinCacheGrindを使って各ファイルを開き、以下のPHPプログラムの実行にかかる時間を求める 最長:

/usr/local/apache/htdocs/tag/tags.php 840msかかる


3. 解析結果:
1. /usr/local/apache/htdocs/tag/tags.php


( 1) 最も時間のかかる filter_tags 関数は、/usr/local/apache/htdocs/tag/tags.php の 158 行目に表示されます。
$tags .= filter_tags($videos[$i]['tags']). " ";

(2) filter_tags 関数は /usr/local/apache/htdocs/include/misc.php から引用しています。 getForbiddenTags 関数は、filter_tags 関数によって 21 回呼び出されます。 getForbiddenTags 関数の内容は次のとおりです:


view plainprint?



function getForbiddenTags()



{







$tagsPath = TEMPLATE_FILE_PATH."tags/forbidden_​​tags.txt";


if(file_exists($tagsPath))

  1. {

  2. $fp = fopen($tagsPath, "r")

    $arrconf = array () ;
  3. 場合($fp)

  4. $line = fgets( $fp, 1024);

  5. $line = トリム($line) ; using using using - if(""! =trim($列[0]))

  6. }
  7. }
  8. (4) getForbiddenTags 関数の分析では、PHP 関数の Trim が 16827 回呼び出されました。
  9. (5) ボトルネックの考えられる理由:
  10. フィルター対象の 156 個のキーワードが /usr/local/apache/template/tags/forbidden_​​tags.txt ファイルに 1 行ずつ保存されており、テキスト データベースが効率的ではありません。
  11. 一行ずつ読み込む関数 fgets や、文字列や指定した文字の両側の空白を削除する関数 Trim は高負荷時には非効率です fopen、fread、fscanf などのファイル読み込み関数をテストして比較できます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。