#はじめに
1 背景
2 Function
Tideways は、PHP のパフォーマンスをテストするために使用される拡張機能で、PHP の実行プロセス全体で呼び出される関数、関数呼び出し数、実行時間、 CPU 時間、メモリ使用量、メモリ ピーク、合計実行時間、合計 CPU 時間、合計メモリ使用量、合計メモリ ピークおよびその他のデータ、上記のデータを分析して PHP のパフォーマンスのボトルネックを特定、PHP 実行プロセスの分析など。3 利点
5 実装原則
tideways 拡張機能は実行ログの生成を担当しますnginx では、fastcgi_param を設定することで実行されます。 PHP_VALUE auto_prepend_file, auto_prepend_fileで設定されたPHPファイルをリクエスト開始前に実行します ファイル内ではregister_shutdown_functionメソッドが使用されます PHPプロセスの最後に、潮汐路の埋め込みを実現するためにtideways_disableが呼び出され、実行ログがmongodbに保存されますmysqlやファイルをxhguiで解析して表示し、表示形式には棒グラフ、ウォーターフォールフロー、フレームチャートなどがあります。
と Non- の 2 つのアプリケーション方法を紹介します。侵入型 侵入型はコードにコードを追加することを指し、侵入型はデフォルトの UI を使用します。
非侵入型は、何も変更せずにコードを追加することを指します。 xhgui を非侵襲的に使用して、nginx/Apache を変更してコード インジェクションを実装します。インストールtideways_xhprof
git clone "https://github.com/tideways/php-xhprof-extension.git" cd php-xhprof-extension phpize ./configure --with-php-config=/usr/local/php7/bin/php-config make sudo make install
php.ini に extension=tideways_xhprof.so# を追加します。
##非侵入型:
<?php tideways_xhprof_enable(); // your application code $data = tideways_xhprof_disable(); file_put_contents( sys_get_temp_dir() . "/" . uniqid() . ".yourapp.xhprof", serialize($data) ); // $data = tideways_xhprof_disable(); // file_put_contents( // sys_get_temp_dir() . "/" . date('His', time()) . ".material.xhprof", // serialize($data) // );ここで生成された .xhprof ファイルは tmp ディレクトリにあります。デフォルトの UI では、次の場所でも .xhprof が検索されます。ファイル
データを検索するために使用されるデフォルトの UI をインストールします
git clone git@github.com:phacility/xhprof.git
xhprof_lib
およびこのリポジトリ xhprof_html ディレクトリを Web フォルダーに移動し、xhprof_html/index.php に移動してトレース リストを表示します。
関数呼び出しのメモを表示したい場合は、Callgraph をインストールする必要がありますCallgraph のインストール
graphviz によって強化された、ドット テキスト グラフィックス言語を処理するためのツール。 C 関数呼び出しツリーをドット形式に変換するためのスクリプト:tree2dotx
Ubuntu を例として、それらを個別にインストールします:sudo apt-get install cflow graphviz次に、tree2dotx と Callgraph をインストールします。デフォルトでは /usr/local/bin にインストールされます。
wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/tree2dotx wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/callgraph sudo cp tree2dotx callgraph /usr/local/bin sudo chmod +x /usr/local/bin/{tree2dotx,callgraph}次の 2 つのレンダリングが表示されます:
侵入的:
# xhgui の侵入的な使用には mongodb が必要です
xhgui のインストールgit clone git@github.com:perftools/xhgui.git
Nginx の構成
server {
listen 80;
server_name site.localhost;
root /Users/markstory/Sites/awesome-thing/app/webroot/;
fastcgi_param PHP_VALUE "auto_prepend_file=/home/www/xhgui/external/header.php"; #这里依据个人目录而配
}
これが意味するのは、非侵入的な検出パフォーマンスの目的を達成するために、プロジェクトの PHP コードを実行する前に header.php を実行することです
xhgui 設定 (頻度ログ生成の数)xhgui の config/config.default.php で、サンプリング ヒット数を設定できます;
return rand(1, 100) === 42; 为1%的采样率,改成return True;则标识每次都采样
'profiler.enable' => function() { // url 中包含debug=1则百分百捕获 if(!empty($_GET['debug'])){ return True; }else{ // 1%采样 return rand(1, 100) === 42; } }
mongodb的配置
xhgui/config/config.default.php
// Can be either mongodb or file. /* 'save.handler' => 'file', 'save.handler.filename' => dirname(__DIR__) . '/cache/' . 'xhgui.data.' . microtime(true) . '_' . substr(md5($url), 0, 6), */ 'save.handler' => 'mongodb', // Needed for file save handler. Beware of file locking. You can adujst this file path // to reduce locking problems (eg uniqid, time ...) //'save.handler.filename' => __DIR__.'/../data/xhgui_'.date('Ymd').'.dat', 'db.host' => 'mongodb://127.0.0.1:27017', 'db.db' => 'xhprof',
mongo > use xhprof > db.results.ensureIndex( { 'meta.SERVER.REQUEST_TIME' : -1 } ) > db.results.ensureIndex( { 'profile.main().wt' : -1 } ) > db.results.ensureIndex( { 'profile.main().mu' : -1 } ) > db.results.ensureIndex( { 'profile.main().cpu' : -1 } ) > db.results.ensureIndex( { 'meta.url' : 1 } )
最后展示几张xhgui的效果图
相关学习推荐:PHP编程从入门到精通
以上がxhprof を使用して php7 で php のパフォーマンスをテストするにはどうすればよいですか? (手法の紹介)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。