ホームページ  >  記事  >  バックエンド開発  >  XHGui を使用した PHP パフォーマンスのテストに関するチュートリアル、xhguiphp パフォーマンス チュートリアル_PHP チュートリアル

XHGui を使用した PHP パフォーマンスのテストに関するチュートリアル、xhguiphp パフォーマンス チュートリアル_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 09:47:26798ブラウズ

XHGui を使用した PHP パフォーマンスのテストに関するチュートリアル、xhguiphp パフォーマンス チュートリアル

プロファイリングは、プログラムのパフォーマンスを観察するために使用されるテクノロジーであり、プログラムのボトルネックやリソース不足を発見するのに非常に適しています。プロファイリングでは、プログラムを深く掘り下げて、リクエスト処理プロセスのコードの各部分のパフォーマンスを表示することができます。同時に、問題のあるリクエスト (リクエスト) を特定し、パフォーマンスの問題が発生している場所を特定することもできます。リクエスト内で発生します。 PHP にはさまざまなプロファイリング ツールがありますが、この記事では主に、非常に優れたツールである XHGui に焦点を当てます。 XHGui は XHProf (XHProf は Facebook によってリリースされています) に基づいて構築されていますが、分析結果のためのより優れたストレージとより優れた情報取得インターフェイスが追加されています。この点で、XHGui はまったく新しいツールのようなものです。

XHGui は何度か改良を重ねてきましたが、現在のバージョンではより美しいユーザー インターフェイスが提供され、プロファイリング結果の保存に MongoDB が使用されています。以前のバージョンと比較すると、これらすべての点が大幅に改善されています。これは、以前のバージョンは開発者によって設計され、データの保存にファイルが使用されていたため、収集されたデータの使用が非常に困難であったためです。 XHGui 2013 は、管理者と開発者の両方にとって非常に包括的なプロファイリング ツールであると同時に、運用環境で実行できるほど軽量になるように設計されています。

この記事では、プログラムのインストールを段階的に説明し、このツールを使用して収集できる情報のあらゆる側面を示します。

ステップ 1: 依存関係をインストールする

XHGui にはいくつかの依存関係があるため、最初のステップはこの問題を解決することです。以下のすべてのチュートリアルは Ubuntu 13.04 プラットフォームに基づいています。もちろん、それらを調整して独自のプラットフォームに適用できるはずです。現時点では、MongoDB、PHP をインストールし、PECL 拡張機能をインストールする機能が必要です。

まず、MongoDB をインストールする必要があります。ここにいくつかの公式インストール チュートリアルがあり、システムに関連する詳細を見つけることができますが、今のところは単純に APT を介してインストールします。

リーリー

この製品は更新が非常に速いため、この方法で取得した MongoDB のバージョンは最新ではない可能性があります。ただし、最新バージョンを維持したい場合は、MongoDB が提供するライブラリをパッケージ マネージャーに追加して、最新バージョンを入手できます。

同時に、PHP 用の Mongo ドライバーも必要です。リポジトリ内のドライバーのバージョンは少し古いため、今日のデモでは Pecl から入手します。マシンに pecl コマンドがない場合は、次のコマンドを使用してインストールできます:


リーリー

次に、次のコマンドを使用して MongoDB のドライバーを PHP に追加します。



リーリー

インストールを完了するには、最後に php.ini ファイルに新しい行を追加する必要があります。ただし、Ubuntu の新しいバージョンでは、Apache モジュールのインストールによく似た PHP 拡張機能を構成するための新しいシステムが提供されます。すべての構成を 1 か所に保存し、構成を起動するためのシンボリック リンクを作成します。まず、設定を保持するファイルを作成します。ただし、この例では、拡張機能を有効にするために設定に新しい行を追加するだけです。これをファイル /etc/php5/mods-available/mongo.ini に保存し、次の行を追加します。


リーリー pecl を再度使用して、xhprof 拡張機能をインストールします。このプログラムは現在ベータ版のみであるため、インストールコマンドは次のとおりです:

リーリー
コマンドラインでは、php.ini に新しい行を追加するよう再度求められます。上記と同じ方法を使用して、ファイル /etc/php5/mods-available/xhprof.ini を作成し、次の内容をそれに追加します。

リーリー この時点で、コマンドラインで php -m コマンドを実行することで、これらのモジュールが正しくインストールされていることを確認できます。 Web インターフェイスでこれらの拡張機能を有効にできるように、Apache を再起動することを忘れないでください。

XHGuiをインストール

XHGui 自体は主に Web ページで構成されており、XHProf 拡張機能によって収集されたデータにより使いやすいインターフェイスを提供します。リポジトリ GitHub リポジトリからクローンを作成することも、zip ファイルを直接ダウンロードして解凍することもできます。プログラムを入手したら、キャッシュ ディレクトリに十分な権限があり、Web サーバーがファイルを書き込む権限を持っていることを確認してください。最後に、インストール スクリプトを実行します:

リーリー
これはプログラムのインストールに必要なすべてであり、一部の依存プログラムは自動的にインストールされます。例外が発生した場合は、インストーラーからもプロンプトが表示されます。

XHGui を仮想ホストにインストールすることを好みます。これには、.htaccess ファイルが許可され、RUL 書き換えが有効になる必要があります。 URL 書き換えの開始は、mod_rewrite モジュールを開始し、次のコマンドを渡す必要があることを示します:

リーリー
(Apache を再起動することを忘れないでください)。すべてがうまくいけば、XHGui URL に通常どおりアクセスして、次のコンテンツを確認できます:


201573145850225.png (300×210) 仮想ホストで XHGui を起動します

此时,我们希望启动XHGui以便检验我们网站的性能。注意,性能测试最好在进行任何优化之前执行一次,以便检测优化的效果。最简单的方法是在虚拟主机中增加auto_prepend_file声明,如下图所示:

 <VirtualHost *:80>
  ServerName example.local
 
  DocumentRoot /var/www/example/htdocs/
  php_admin_value auto_prepend_file /var/www/xhgui/external/header.php
 
  <Directory /var/www/example/htdocs/>
    Options FollowSymLinks Indexes
    AllowOverride All
  </Directory>
 
</VirtualHost>

一切就绪之后,你可以开始剖析网站的请求。XHGui只会剖析网站请求的1%,所以为了使XHGui获取有意义的数据,你需要让XHGui运行一段时间或者使用类似Apache Bench的测试工具批量提交一批请求。为什么在100个请求当中XHGui只会剖析一个?因为XHGui的设计初衷就是足够的轻巧以便在生产环境中使用,它不想对每一个请求产生额外的开销,1%的采样率已经能够为网站的总体流量提供较为清晰的概览。

满足数据

我使用测试虚拟机运行本文所有的示例,采用Joind.in API作为测试代码。为了产生一些流量,我将API测试案例运行了几遍。你也可以在一定负载的情况下收集数据,所以你可以在压力测试时使用XHGui,你甚至可以在上线站点中使用XHGui收集数据(听起来很疯狂,但是Facebook正式为了此应用才开发了该工具)。在向应用发送了一定的请求之后,重新访问XHGui,现在它就已经保存了一些数据:

201573145913073.png (300×210)

该图向我们展示了XHGui为我们分析的每一个请求,最新的请求排在第一位,并且为每一个请求展示了一些额外信息。这些信息包括:

  •     URL:请求所访问的URL
  •     Time:请求发起时间
  •     wtor: "Wall Time" –请求所经历的所有时间. 这是 "wall clock" time的简称,表示用户等待请求完成所有的时间
  •     cpu:花费在该请求上的CPU时间
  •     mu:该请求所消耗的内存
  •     pmu:请求处理过程中所消耗的最大内存

为了获取每一遍请求("run")更为详细的信息,你可以点击每一个请求你感兴趣的列。你可以点击URL以便获取该URL所有请求的详细信息。无论哪种方法,你都可以获取该请求更为详细的信息:

201573145938626.png (300×210)

201573145957832.png (300×210)

 这是一个非常长并且非常详细的页面,所以我引用了两个截图(如果展示所有的信息将需要5个截图)。上面一幅图的左边部分展示了该请求相关的一些信息,以便帮助你跟踪这些统计信息与哪些方面有关;右边的主要部分展示了最消耗时间的各部分以及在请求过程中每个函数调用所消耗的内存。在图的下方有一个主键以表明每一栏。

第二幅图展示了该请求每一个组成部分更为详细的信息。我们可以看到每一部分调用的次数以及时间消耗,还包括CPU和内存信息。无论是inclusive还是exclusive信息都做了详细的展示:exclusive表示仅仅是该方法调用所产生的消耗;inclusive不仅包括本函数所产生的消耗,还包括本函数调用的其他函数所产生的消耗。


XHGui另一个特性是“调用图”(Callgraph),“调用图”以生动的虚拟方式展示了时间是如何消耗的:

201573150016938.png (300×210)

 这很好的展示了函数调用的层次。最好的一点是,该图是可交互的,你可以拖拽以更好的查看连接;你还可以用鼠标滑过“圆环”(blob)以查看更多的信息。当你与它交互时,他会很好玩的弹回和移动,这不是一个非常重要的特性但却让我感觉非常好玩。

理解数据

拥有大量的统计数据非常重要,但是你很难知道从哪里下手。对于一个性能不如预期的页面采用如下步骤:首先,对每一个函数的exclusive CPU时间进行排序,查看最消耗时间的函数列表。分析这些耗时的函数调用并进行重构和优化。

一旦做出了修改,让剖析工具再次检验新版本的程序,测试性能的改进。XHGui内置了完美的工具以比较两次运行;点击详细信息页面右上角的“Compare this run"按钮即可。该按钮会向你展示该URL每一次测试的结果,从中选择一个你要比较的对象。对你想比较的对象,点击”compare“按钮,XHGui将会转向比较视图,如下图所示:

201573150035219.png (300×210)

統計表には、各情報の変更の実際の数と割合を含む、統計情報の新バージョンと旧バージョンの主な違いが表示されます。上の図は、新バージョンのリクエスト待ち時間が旧バージョンのわずか 8% であることを示しています。統計表には、各統計情報の詳細な変化が表示されます。これは「詳細」ページでよく確認されます。任意の列をソートして、興味のある情報を見つけることができます。

1 つの領域でリファクタリングが成功したら、詳細ページをチェックして新しいバージョンが実際にどのように動作するかを確認し、最適化する他の領域を選択します。アプリケーションの全体的なパフォーマンスを最大化する機能を選択して最適化するには、メモリ使用量または排他的経過時間で並べ替えてみてください。同時に、呼び出し数を確認することを忘れないでください。関数を繰り返し呼び出すと、最適化後にプログラムのパフォーマンスが飛躍的に向上します。

最適化手法

結果を定量化する前に、どれだけ改善したかを知るのは困難です。そのため、私たちはアプリを最適化する前にテストすることがよくあります。そうでない場合、アプリが本当に最適化されているかどうかをどうやって知ることができるのでしょうか?また、実際のデータのセットをどのように表現すべきかについても考える必要があります。そうしないと、不可能な目標に向かってしまう可能性があります。非常に便利な方法は、最適なデータ構造と使用する必要のある最小のストレージ容量を見つけるために最善を尽くすことです。好みの作業環境で「Hello world」プログラムを 0.5 秒で実行できない場合は、同じツールで構築された Web ページが適切に動作することを期待しないでください。

上記の説明はプログラミング フレームワーク (フレームワーク) を軽視しているわけではありません。プログラミング フレームワークは使いやすく、迅速な開発をサポートし、保守が容易であるために存在します。手動でコードを記述する場合と比較して、プログラミング フレームワークのパフォーマンスが低下するのは、あらゆる面で妥協した結果です。アプリケーション開発にプログラミング フレームワークを使用すると、必要に応じてプロファイリング ツールを使用してプログラムのパフォーマンスを分析し、改善することができます。たとえば、Zend Framework 1 の多くのモジュールは非常に強力な機能を提供しますが、非常に時間がかかります。プロファイリング ツールを使用すると、パフォーマンスの低い部分を特定して置き換えることができます。他のすべてのフレームワークにも同様の問題があり、XHGui は問題の場所を示し、それがアプリケーションに定量的な影響を与えているかどうかを確認できます。


プログラムの外では、遅かれ早かれ、優位性を得るために他の戦略が役に立つかもしれません:

  • ページに表示される、危険なほど遅くはないが関連する機能に注意してください。ページの時間の 50% が、書式設定ポイントを処理するビュー ヘルパーの一連の関数に費やされている場合 (これは仮説の例であることをお約束します)、コンポーネント全体のリファクタリングを検討することをお勧めします。
  • やることを減らしましょう。パフォーマンスが機能よりも重要な場合は、機能を削除してみてください。
  • 1 回のリクエストで生成されたが特定のビューでは使用されないコンテンツ、または変更されていないが複数回再生成されたコンテンツに注意してください。
  • 優れたキャッシュ戦略。これについては別の記事にしますが、PHP で OpCode キャッシュ (PHP 5.5 で組み込まれている) を使用し、Web サーバーの前にリバース プロキシを追加し、頻繁に変更されないコンテンツを提供するだけで適切なキャッシュ ヘッダーを送信することを検討してください。
  • 暴力的なデカップリング。リソースを大量に消費する特別な機能がある場合は、Web サーバーから削除してください。おそらく、非同期的に処理できるため、プログラムはメッセージをキューに追加するだけでよいし、別のサーバーに移動して別のサービス モデルとしてアクセスすることもできます。いずれの場合でも、分離すると Web サーバーの負荷が軽減され、効率的なスケーリングが可能になります。

XHGui はあなたの友達です

XHGui はインストールが簡単で、使用するときにすぐに使用でき、出力は取締役会でプレゼンテーションできるほど優れています。これはアプリのバグを特定し、アプリが実際に動作する (または動作しない) ことを確認するのに役立ちます。これにはいくつかの繰り返しのプロセスが必要になる可能性がありますが、これまでに XHProf または XHGui を使用したことがあるかどうかに関係なく、時間をかけてアプリケーションで試してみることをお勧めします。その結果に驚かれることでしょう。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1026543.html技術記事 XHGui を使用した PHP パフォーマンスのテストに関するチュートリアル、xhguiphp パフォーマンス チュートリアル プロファイリングは、プログラムのパフォーマンスを観察するために使用されるテクノロジであり、プログラムのボトルネックやリソース不足を発見するのに非常に適しています。教授...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。