MongoDB または PDO データベースに結果を保存できる XHProf プロファイリング データのグラフィカル インターフェイス。
アプリケーションがプロファイリングされ、プロファイリング データが XHGui に転送されます。XHGui はその情報を取得して MongoDB (または PDO データベース) に保存し、それを操作するための便利な GUI を提供します。
このプロジェクトは、プロファイリング結果を表示するための GUI です。アプリケーションをプロファイリングするには、特定の最小限のライブラリを使用します。
XHGui には次の要件があります。
どのバックエンドを使用するかを決定する必要がある場合は、バックエンドごとにどの機能が実装されているか、または欠落している機能があるかを互換性マトリックスで確認できます。
デフォルトのインストールでは MongoDB データベースを使用します。ドキュメントのほとんどは MongoDB について説明しています。
pecl install mongodb
XHGui にはバージョン 1.3.0 以降が必要です。ドライバーおよび付随するデータベースのいずれか:
注: PDO は XHGui のすべての機能をサポートしているわけではありません。#320 を参照してください。
GitHub からxhgui
クローンまたはダウンロードします。
Web サーバーがwebroot
ディレクトリを指すようにします。
cache
ディレクトリにアクセス許可を設定して、Web サーバーがファイルを作成できるようにします。怠け者であれば、 0777
役に立ちます。
次のコマンドは、 cache
ディレクトリの権限を変更します。
chmod -R 0777 cache
MongoDB インスタンスを開始します。 XHGui は、MongoDB インスタンスを使用してプロファイリング データを保存します。
MongoDB セットアップが認証を使用している場合、またはデフォルトのポートとローカルホストで実行されていない場合は、XHGui がmongod
インスタンスに接続できるように XHGui のconfig/config.php
更新します。
(オプションですが推奨) パフォーマンスを向上させるために MongoDB にインデックスを追加します。
XHGui は、MongoDB のxhprof
データベース内のresults
コレクションにプロファイリング情報を保存します。インデックスを追加するとパフォーマンスが向上し、ページをより速く移動できるようになります。
インデックスを追加するには、コマンド プロンプトからmongo
シェルを開きます。次に、次のように MongoDB のdb.collection.ensureIndex()
メソッドを使用してインデックスを追加します。
$ 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 } )
> db.results.ensureIndex( { 'meta.simple_url' : 1 } )
> db.results.ensureIndex( { 'meta.SERVER.SERVER_NAME' : 1 } )
Composer を使用して依存関係をインストールする
composer install --no-dev
ウェブサーバーをセットアップします。以下の構成セクションでは、nginx と apache の両方の書き換えルールを設定する方法について説明します。
このセットアップでは、docker-compose を使用して Docker コンテナーを調整します。
GitHub からxhgui
クローンまたはダウンロードします。
コンテナを起動します: docker-compose up -d
http://xhgui.127.0.0.1.xip.io:8142 でブラウザを開くか、http://localhost:8142 でブラウザを開くか、ターミナルでcomposer open
と入力します。
xhgui をカスタマイズするには、 config/config.default.php
config/config.php
にコピーし、そのファイルを編集します。
docker-compose をカスタマイズするには、 docker-compose.yml
docker-compose.override.yml
にコピーし、そのファイルを編集します。
XHGui は URL 書き換えを有効にすることを好みますが、それなしでも機能します。 Apache の場合、次の手順を実行して URL 書き換えを有効にできます。
.htaccess オーバーライドが許可されていることと、AllowOverride に正しい DocumentRoot に設定されたディレクティブ FileInfo があることを確認してください。
Apache 2.4 の設定例:
< Directory /var/www/xhgui/>
Options Indexes FollowSymLinks
AllowOverride FileInfo
Require all granted
</ Directory >
mod_rewrite を正しくロードしていることを確認してください。次のようなものが表示されるはずです。
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
XHGui には、残りの書き換えルールを有効にするための.htaccess
ファイルが付属しています。
nginx と fast-cgi の場合は、最初に次のスニペットを使用できます。
server {
listen 80 ;
server_name example.com;
# root directive should be global
root /var/www/example.com/public/xhgui/webroot/;
index index.php;
location / {
try_files $uri $uri / /index.php? $args ;
}
location ~ .php$ {
try_files $uri =404 ;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name ;
}
}
アプリケーションをプロファイリングするためにサポートされている方法は、perftools/php-profiler パッケージを使用することです。
このパッケージを使用して、Web アプリケーションまたは CLI スクリプトからデータを収集できます。
このデータは XHGui データベースにプッシュされ、XHGui アプリケーションで表示できるようになります。
php-profiler
パッケージでは、リクエストの最後にプロファイリングが完了すると、データを XHGui インスタンスに直接送信できます。
アプリケーションが XHGui インスタンスに直接接続できない場合、パッケージは、後でインポート スクリプトを使用してインポートできるファイルにプロファイリング データをキャプチャするソリューションを提供します。
警告: 同じファイルを 2 回インポートすると、重複したプロファイルが作成されます。
特に大規模なコード ベースや大規模なフレームワークを使用するアプリケーションをプロファイリングする場合、ディスク使用量が急速に増加する可能性があります。
増加を抑えるには、TTL インデックスを作成して、プロファイリング ドキュメントが一定の期間に達したら自動的に削除するように MongoDB を構成します。
プロファイル ドキュメントの最大保存期間を秒単位で決定します。開発中 (すべてをプロファイリングする場合) では、本番環境 (選択したドキュメントのみをプロファイリングする場合) よりも低い値を選択することをお勧めします。次のコマンドは、5 日 (432000 秒) を超えたドキュメントを削除するように Mongo に指示します。
$ mongo
> use xhprof
> db.results.ensureIndex( { "meta.request_ts" : 1 }, { expireAfterSeconds : 432000 } )
XHGui のウォーターフォール表示の目的は、同時リクエストが相互に影響を与える可能性があることを認識することです。同時データベース要求、CPU を集中的に使用するアクティビティ、さらにはセッション ファイルのロックが関係する可能性があります。 Ajax を多用したアプリケーションでは、ページの構築を理解することは単一の読み込みよりもはるかに複雑です。ウォーターフォールが役立つことを願っています。リクエストのサンプルだけをプロファイリングしている場合、ウォーターフォールは無礼な嘘で埋め尽くされることに注意してください。
いくつかのメモ:
request_ts_micro
値のストレージが導入されています。サービスの健全性の監視に適した Prometheus メトリクスは、 /metrics
で公開されています。 (これは現在、ストレージに PDO を使用している場合にのみ機能します。)
特徴 | モンゴDB | PDO |
---|---|---|
プロメテウスの輸出業者 | #305 | |
検索者::最新() | ||
サーチャー::クエリ() | #384 | |
検索者::get() | ||
サーチャー::getForUrl() | #436 | |
Searcher::getPercentileForUrl() | #436 | |
検索者::getAvgsForUrl() | #384 | |
検索者::getAll(並べ替え) | #436 | |
検索者::getAll(方向) | #436 | |
検索者::delete() | ||
検索者::truncate() | ||
サーチャー::saveWatch() | #435 | |
サーチャー::getAllWatches() | #435 | |
Searcher::truncateWatches() | #435 | |
検索者::統計() | #305 | |
検索者::getAllServerNames() | #460 |
変更ログとリリース情報については、リリースを参照してください。
著作権 (c) 2013 マーク ストーリー & ポール ラインハイマー
本ソフトウェアおよび関連ドキュメント ファイル (以下「ソフトウェア」) のコピーを入手した人には、使用、コピー、変更、マージする権利を含むがこれらに限定されない、制限なくソフトウェアを取り扱う許可が、ここに無償で与えられます。 、以下の条件を条件として、本ソフトウェアのコピーを出版、配布、サブライセンス、および/または販売すること、および本ソフトウェアが提供される人物にそれを許可すること。
上記の著作権表示およびこの許可通知は、ソフトウェアのすべてのコピーまたは主要部分に含まれるものとします。
ソフトウェアは「現状のまま」提供され、明示的か黙示的かを問わず、商品性、特定目的への適合性、および非侵害の保証を含むがこれらに限定されない、いかなる種類の保証も行われません。いかなる場合においても、作者または著作権所有者は、契約行為、不法行為、またはその他の行為であるかどうかにかかわらず、ソフトウェアまたはソフトウェアの使用またはその他の取引に起因または関連して生じる、いかなる請求、損害、またはその他の責任に対しても責任を負わないものとします。ソフトウェア。