ホームページ >バックエンド開発 >PHPチュートリアル >PHP パフォーマンス分析パート 1: Xhprof と Xhgui の概要

PHP パフォーマンス分析パート 1: Xhprof と Xhgui の概要

PHP中文网
PHP中文网オリジナル
2016-06-23 13:26:221086ブラウズ

注: これは PHP アプリケーションのパフォーマンス分析シリーズの最初の記事であり、xhgui について詳しく理解するには 2 番目の記事を参照してください。3 番目の記事はパフォーマンス チューニングの実践に焦点を当てています。

パフォーマンス分析とは何ですか?

パフォーマンス分析は、コードレベルでのアプリケーションの相対的なパフォーマンスの尺度です。パフォーマンス分析がキャプチャするイベントには、CPU 使用率、メモリ使用量、関数呼び出しの期間と回数、呼び出しグラフが含まれます。プロファイリングの動作はアプリケーションのパフォーマンスにも影響します。

PHP パフォーマンス分析パート 1: Xhprof と Xhgui の概要

影響の程度はベンチマークによって異なります。ベンチマークは外部で実行され、実際のアプリケーションのパフォーマンスを測定します。いわゆる実際のパフォーマンスとは、エンドユーザーが体験するアプリケーションのパフォーマンスを指します。

パフォーマンス分析はいつ実行する必要がありますか?

パフォーマンス分析を実行するかどうかを検討するときは、まず次のことを考慮する必要があります: アプリケーションにパフォーマンス上の問題があるか?そうであれば、問題はどの程度の大きさなのかをさらに検討する必要があります。

これを行わないと、時期尚早に最適化するという罠に陥り、時間を無駄にする可能性があります。

アプリケーションにパフォーマンスの問題があるかどうかを判断するには、パフォーマンス目標を決定する必要があります。たとえば、100 人の同時ユーザーの応答時間は 1 秒未満です。次に、ベンチマークを実行して、この目標を達成したかどうかを確認する必要があります。よくある間違いは、開発環境でベンチマークを実行することです。実際、実稼働環境でベンチマークを行う必要があります。 (実際の本番環境または模擬本番環境。後者は SaaS での実装が簡単です (参照: OneAPM パフォーマンス オンライン分析)。

ベンチマーク テスト用の製品は、ab、siege、JMeter など多数あります。個人的には JMeter の機能が好きです設定されていますが、ab と siege の方が使いやすいです

アプリケーションにパフォーマンスの問題があると判断したら、パフォーマンスを分析し、改善を実装してから、問題が解決したかどうかを確認するために再度ベンチマークを実行する必要があります。それぞれの変更をベンチマーク テストして、その影響を確認します。多くの変更を加えてアプリケーションのパフォーマンスが低下した場合、どの変更が問題の原因であるかを判断できません。次の図は、私が定義したパフォーマンス ライフ サイクルです。

PHP パフォーマンス分析パート 1: Xhprof と Xhgui の概要パフォーマンス低下の一般的な原因

パフォーマンス低下の一般的な原因の中には、PHP のような高級言語であっても、今日のハードウェアではコードの品質が問題の原因になることはほとんどありません。パフォーマンスの制限によるものはほとんどありません。代わりに、

データ ストレージ

    MySQL
  • MSSQL
  • リアク
  • Cassandra
  • Memcache
  • CouchDB
  • Redis
  • 外部リソース
  • API
  • ファイルシステム

ネットワークインターフェース
  • 外部プロセス
  • 悪いコード
  • どのプロファイラーを選択すべきですか?

    PHP の世界には 2 つの異なるプロファイラーがあります??アクティブとパッシブ
  • アクティブ プロファイリングとパッシブ プロファイリング

    アクティブ プロファイラー。開発中に使用され、開発者によって有効化されます。 Xdebug はアクティブなアナライザーです。アクティブなプロファイラーは運用環境では使用できないため、XHprof はパフォーマンスへの影響を最小限に抑えながら運用環境で使用できるように構築されています。パフォーマンスの問題を診断するのに十分な情報を収集します。XHprof と OneAPM はどちらもパッシブ プロファイラーです。一般に、Xdebug によって収集される追加情報は、ノンストップ パフォーマンス分析には必要ありません。開発環境でも
Xhgui

Xhprof は Facebook によって開発され、パフォーマンス データを表示するための基本的なユーザー インターフェイスと、表示、比較、拡張されたユーザー インターフェイス (UI) が含まれています。パフォーマンス データを分析します。

インストール

XHPROF をインストールします

Xhprof は PECL 経由でインストールできます。次の手順に従ってください:

$pecl install xhprof-beta

pecl コマンドは、php.ini 設定を自動的に更新しようとします。 pecl が更新しようとしているファイルは、次のコマンドを使用して見つけることができます:

$ pecl config-getphp_ini

これにより、指定されたファイル (存在する場合) の上に新しい構成行が追加されます。より適切な場所に移動することもできます。

拡張機能をコンパイルしたら、それを有効にする必要があります。これを行うには、PHP INI ファイルに次のコードを追加する必要があります:

[xhprof]
extension=xhprof.so

その後、Xhgui を使用してパフォーマンス分析と検査を簡単に実行できます。

XHGUI をインストールします

Xhgui をインストールします。これは git から直接取得する必要があります。プロジェクトは github で https://github.com/perftools/xhgui にあります

Xhgui 要件:

  • PHP 5.3+

  • ext/mongo

  • composer

  • MongoDB(若只需要收集数据,则可选可不选;若需要数据分析,则为必选)

首先,克隆项目到任意位置。在基于 Debian 的 Linux 系统(例如 Ubuntu 等等),可能是 /var/www。在 Mac OS X 系统,可能是 /Library/WebServer/Documents。

$cd /var/www
$ git clone https://github.com/perftools/xhgui.git$ cd xhgui
$ php install.php

 

最后一个命令是运行 composer 以安装依赖并检查 xhgui 缓存目录的权限。如果失败,你可以手动运行 composer install。

下一步,你可能需要创建配置文件。这一步很容易实现,可以使用在 /path/to/xhgui/config/config.default.php 下的默认配置文件。

如果你在本地运行 mongodb ,没有身份验证,则可能不需要这样做。因为它将回退为默认值。而在多服务器环境中,你会需要一个所有服务器都能进行存储的远程 mongodb 服务器,并进行恰当的配置。

为提高 MongoDB 的性能,你可以运行以下指令以添加索引:

$ mongo

 

use xhprof


其他配置

如果你不想在生产环境中安装 mongo ,或无法让 Web 服务器访问 mongo 服务器,您可以将性能分析数据保存在磁盘中,再导入到本地MongoDB 供以后分析。

为此,请在 config.php 中进行以下修改:

<?php
&#39;save.handler&#39; = &#39;file&#39;,
&#39;save.handler.filename&#39; => &#39;/path/to/xhgui/xhprof-&#39; .uniqid("", true). &#39;.dat&#39;,
?>

 

改变文件中的 save.handler,然后取消批注 save.handler.filename ,为其赋一个恰当的值。

注意:默认每天只保存一个分析文件。

一旦分析数据的准备就绪,你就可以使用 xhgui 附带的脚本导入之:

$ php /path/to/xhgui/external/import.php /path/to/file.dat

 

在此之后的步骤都相同。

运行 Xhgui

Xhgui 是以 PHP 为基础的 Web 应用程序,你可以以 /path/to/xhgui/webroot为根文件,设置一个标准的虚拟主机。

或者,你可以简单地使用 PHP 5.4 + cli-server 例如:

$cd/path/to/xhgui
$ php -S0:8080-t webroot/

 

这将使 Xhgui 在所有网络接口都可通过 8080 端口进行通信。

运行性能分析器

运行分析器时,你需要在待分析的所有页面包含 external/header.php 脚本。为此,你可以在 PHP ini 文件设置 auto_prepend_file 。你既可以直接在公共 INI 文件进行设置,也可以限制到单一的虚拟主机。

对于 Apache 服务器,添加以下代码:

php_admin_value auto_prepend_file "/path/to/xhgui/external/header.php"

 

对于 Nginx 服务器,在服务器配置中添加以下代码:

fastcgi_param PHP_VALUE "auto_prepend_file=/path/to/xhgui/external/header.php";

 

如果您使用 PHP 5.4 + cli-server(PHP - S),则必须通过命令行标记进行设置:

$ php -S 0:8080 -dauto_prepend_file=/path/to/xhgui/external/header.php

 

默认情况下,分析器运行时只分析(大约)1%的请求。这是由以下 external/header.php 代码控制的:

<?php
if (rand(0, 100) !== 42) {  
 return;
}
?>

 

如果你想分析每一个请求(例如,在开发阶段),你可以将这段代码注释掉。如果你想让分析10%的请求,你可以做如下改动:

<?php
if (rand(0, 10) !== 4) { 
  return;
}
?>

 

这允许你对一小部分用户请求进行分析,而不过多影响单个用户或太多用户。

如果你想在性能分析时进行手动控制,你可以这样做:

<?php
if (!isset($_REQUEST[&#39;A9v3XUsnKX3aEiNsUDZzV&#39;]) && !isset($_COOKIE[&#39;A9v3XUsnKX3aEiNsUDZzV&#39;])) {
  return;
} else {
  // Remove trace of the special variable from REQUEST_URI
  $_SERVER[&#39;REQUEST_URI&#39;] = str_replace(array(&#39;?A9v3XUsnKX3aEiNsUDZzV&#39;, &#39;&A9v3XUsnKX3aEiNsUDZzV&#39;), &#39;&#39;, $_SERVER[&#39;REQUEST_URI&#39;]);

  setcookie(&#39;A9v3XUsnKX3aEiNsUDZzV&#39;, 1);
}

if (isset($_REQUEST[&#39;no-A9v3XUsnKX3aEiNsUDZzV&#39;])) {
  setcookie(&#39;A9v3XUsnKX3aEiNsUDZzV&#39;, 0, time() - 86400);
  return;
}
?>

这段代码会检查一个随机命名的 GET/POST/COOKIE 变量(在此例中为:A9v3XUsnKX3aEiNsUDZzV),同时创建一个同名的 Cookie ,用于分析该请求的整个过程,例如:表单提交后的重定向,Ajax 请求等等。

此外,它允许一个名为 no-A9v3XUsnKX3aEiNsUDZzV 的 GET/POST 变量来删除 cookie ,停止分析。

当然,我们欢迎大家尝试使用 OneAPM 来为您的 PHP 和 Java 应用做免费的性能分析。OneAPM 独有的探针能够深入到所有 PHP 和 Java 应用内部完成应用性能管理和监控,包括代码级别性能问题的可见性、性能瓶颈的快速识别与追溯、真实用户体验监控、服务器监控和端到端的应用性能管理。 OneAPM 可以追溯到性能表现差的 SQL 语句 Traces 记录、性能表现差的第三方 API、Web 服务、Cache 等等。

在下一篇文章中,我们将深入研究 Xhgui ,以及用于展示、比较 xhprof 数据的用户界面 。

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