ホームページ  >  記事  >  バックエンド開発  >  本番環境でのPHPパフォーマンステストツールxhprofの使用に基づいた詳細な説明_PHPチュートリアル

本番環境でのPHPパフォーマンステストツールxhprofの使用に基づいた詳細な説明_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:09:40839ブラウズ

xhprof は、Facebook によってオープンソース化された PHP パフォーマンス テスト ツールです。この言葉をどのように翻訳すれば意味があるのか​​わかりません。以前使用していた xdebug と比較すると、多くの類似点があります。以前、参考になる xdebug の記録がいくつかありましたが、profiler_enable_trigger パラメータをオンにしても、本番環境で使用するとパフォーマンスに大きな影響を与えるという欠点がありました。 CPU はすぐに High に達します。
xhprof は非常に軽量で、プロファイルを記録するかどうかをプログラムで制御できるため、本番環境でも使用することが可能になります。そのような使用法はドキュメントで確認できます:
10,000 分の 1 の確率で xhprof を有効にし、通常は静かに撮影しません。

コードをコピー コードは次のとおりです:

if (mt_rand(1, 10000) == 1) {
xhprof_enable(XHPROF_FLAGS_MEMORY);
$xhprof_on = true;
}

メソッドを呼び出すプログラムの最後に プロファイルを保存します
コードをコピーします コードは次のとおりです:

if ($xhprof_on) {
// プロファイラを停止します
$xhprof_data = xhprof_disable();

// $を保存しますxhprof_data をどこか (中央の DB など) に
...
}

register_shutdown_function メソッドを使用して、プログラムの最後に xhprof 情報を保存するように指定することもできます。これにより、最後に判断する必要がなくなります。不完全な書き換え例:
コードをコピーします コードは次のとおりです:

if (mt_rand(1, 10000) == 1) {
xhprof_enable(XHPROF_FLAGS_MEMORY);
register_shutdown_function(create_funcion() ”、 "$xhprof_data = xhprof_disable(); save $xhprof_data;"));
}

ログに関しては、現在最も原始的なファイル形式を使用して保存し、定期的にクリアするだけです。
ところで: xhprof によって生成されたグラフィカルなプロファイルは非常に優れており、どのコード部分がボトルネックになっているかが一目でわかります。
phpe 作成: 以下に例を示します:



xhprof の使用改善に関するアイデア
xhprof が昨年本番環境で使用されて以来、本番環境でのプログラムのデバッグとパフォーマンスの最適化に非常に便利になりました。ただし、使用中に改善が必要な点がいくつかあります。
問題
xhprof のプロファイル ログは、運用サーバー上のファイルとして直接保存されており、定期的にクリーンアップするか、ログを表示するために収集してツール マシンに移動する必要があります。
xhprof によって生成されたプロファイルは大きな配列であるため、ファイルに保存する際には標準の php シリアル化が使用され、ログ ファイルは比較的大きく、注意しないとサーバーのディスク領域を大量に占有する可能性があります。
ログリストを表示するときに、それぞれをクリックするのは困難です。
これらの質問に答えて、いくつかの小さなアイデアがあります。
ログストレージ
中央ログサーバーを展開し、Facebook の scribe を使用してログを収集します。運用環境のサーバーによって生成された xhprof ログはスクライブ クライアントに書き込まれ、クライアントはローカル ストレージ領域を占有することなく、中央ログ サーバー上のスクライブに自動的に同期します。コードの変更も比較的小規模で、iXHProfRuns インターフェイスに基づいて XhprofRuns クラスを実装し、save_run メソッドのストレージ メソッドを調整するだけです。
シリアル化メソッドを変更します
xhprof のデフォルトでは、PHP のネイティブなシリアル化メソッドでプロファイル情報を処理してから保存します。2 日前のテストでは、igbinary と Serialize と json_encode のパフォーマンスと占有バイト数を比較しました。はあらゆる面で一定の利点があり、特に占有されるストレージ容量が大幅に削減されるため、改善するにはシリアル化メソッドを igbinary_serialize に変更するだけで済みます。
リスト表示の最適化
プロフィールログの大きな画像を一つ一つ見るのは時間と労力がかかり、ターゲットを絞ったものではありません。そこで私が現在行っていることは、プロファイル ログのリストの最初の 1000 ログの全体の実行時間をリストに直接出力し、実行時間が長すぎるログを赤い太字でマークすることです。この小さな変更を加えた後は、動作状況を確認したいときに、ログリストの赤いリンクをクリックして確認するだけで済み、非常に時間と労力が節約されます。
xhprof ログファイルから実行時間を取得するには?簡単なコードは次のとおりです

コードをコピーしますコードは次のとおりです:

/**
* xhprof ログから実行時間を取得します
*
* @param string $log xhprof ログのファイルパス
* @return int 実行時間
*/
function getSpentTime($log) {
$profile = unserialize(file_get_contents($log));
return $profile['main()']['wt'] / 1000;
}

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327204.html技術記事 xhprof は、Facebook によってオープンソース化された PHP パフォーマンス テスト ツールです。この言葉をどのように翻訳すれば意味があるのか​​わかりません。以前使用していた xdebug と比較すると...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。