目次
冒頭の言葉
Docker 仮想テスト環境の事前構築
1 . xhprof
1.1 プロジェクトをプルします
1.2 プロジェクトをインストールします
1.3 xhprof.so 拡張を追加します
2. xhprof を使用してケースを構築するプロセス
3.3 [View Full Callgraph]
4. 问题点
5. 结束
ホームページ バックエンド開発 PHP7 php7で解析するにはxhprofを使用します

php7で解析するにはxhprofを使用します

Jun 22, 2020 pm 05:39 PM
php

php7で解析するにはxhprofを使用します

冒頭の言葉

これは純粋なドキュメントです。将来必要になった場合はいつでも参照でき、コードを容易にするための分析に xhprof を使用できます。テストと比較分析 (php7 がサポートされています)

推奨チュートリアル: "php チュートリアル"

Docker 仮想テスト環境の事前構築

docker run -it -p 80:80 -v /Users/xxx/Desktop/xhprof:/data phalcon /bin/bash复制代码

1 . xhprof

サポートのインストール php7 用の xhprof はたくさんありますが、ここでは github.com/longxinH/xh... このプロジェクトを使用します。

1.1 プロジェクトをプルします

git clone https://github.com/longxinH/xhprof.git复制代码

1.2 プロジェクトをインストールします

cd xhprof/extension/
/usr/server/php7/bin/phpize
./configure --with-php-config=/usr/server/php7/bin/php-config
make && make install复制代码

1.3 xhprof.so 拡張を追加します

実行後、この so ファイルを導入する必要がありますphp.ini 設定に移動します。

php.ini ファイル パスを表示します。

/usr/server/php7/bin/php --ini

Configuration File (php.ini) Path: /usr/server/php7/etc
Loaded Configuration File:         /usr/server/php7/etc/php.ini
Scan for additional .ini files in: /usr/server/php7/etc/php
Additional .ini files parsed:      (none)复制代码

/usr/server/php7/etc/php.ini を編集します。

[Xhprof]
extension=xhprof.so
xhprof.output_dir=/data/logs复制代码

php を再起動します。 fpm、つまりCanです。

2. xhprof を使用してケースを構築するプロセス

監視対象のロジックの前に次のコードを埋め込みます

\xhprof_enable();
......$order = new OrderAdepter();$result = $order->getUserOrderByOrderNo(123);
......$xhprof_data = \xhprof_disable();
print_r($xhprof_data);复制代码

出力:

php7で解析するにはxhprofを使用します

これを見ると、xhprof 拡張機能内の 2 つの関数が呼び出され、出力値の意味がわかりました。

ct 表示 当前这个函数调用的次数,此案例都是1次
wt 表示 函数执行时间的耗时,单位为微秒复制代码

, 取得した情報はそれほど多くないことがわかりました。たとえば、占有メモリ、CPU、その他の指標も気にすることがよくあります。

\xhprof_enable(
    XHPROF_FLAGS_MEMORY  
    +XHPROF_FLAGS_CPU
    +XHPROF_FLAGS_NO_BUILTINS
);复制代码

output:

php7で解析するにはxhprofを使用します
  1. # #XHPROF_FLAGS_MEMORY 統計的なメモリ使用量

  2. XHPROF_FLAGS_CPU CPU 使用率の統計

  3. XHPROF_FLAGS_NO_BUILTINS 組み込み関数はカウントされません。この出力では、拡張内の関数が無視されていることがわかります。

関数には 2 つの出力フィールドがあることがわかりました。メモリ使用量、mu と pmu をカウントします。mu は使用メモリ (バイト) を表し、pmu は使用メモリのピーク値 (バイト) を表します。

3. グラフ xhprof

もちろん、まだこのままです。グラフの形式がより直感的になることを願っています。パフォーマンスのボトルネックを観察し、その使用方法を見てみましょう。

3.1 現時点では、xhprof_lib ライブラリを使用する必要があります。

xhprof ソース コードでは、ディレクトリにはすでに

\xhprof_enable(XHPROF_FLAGS_MEMORY + XHPROF_FLAGS_CPU+XHPROF_FLAGS_NO_BUILTINS);

......$order = new OrderAdepter();$result = $order->getUserOrderByOrderNo(123);
......$xhprof_data = \xhprof_disable();

include_once  '/data/xhprof-master/xhprof_lib/utils/xhprof_lib.php';
include_once  '/data/xhprof-master/xhprof_lib/utils/xhprof_runs.php';$xhprof_runs = new \XHProfRuns_Default();$run_id = $xhprof_runs->save_run($xhprof_data, 'your_project');echo $run_id; //output 5cbf25e21fe9b复制代码
## が含まれています #実行すると文字列が出力されます。これはファイル識別子として理解できます。 save_run メソッドが実行されたことがわかりましたが、それはどこに保存されましたか?

xhprof.so 拡張機能を導入したときの別の設定を覚えていますか?

はい、xhprof.output_dir 内にあります。パス (ディレクトリを手動で作成する必要があります)

php7で解析するにはxhprofを使用します
興味がある場合は、それを開いて見てください。シリアル化されたオブジェクト情報

3.2 分析結果にアクセスするための別のサービスの構成

php7で解析するにはxhprofを使用します
xhprof プロジェクトの xhprof_html ディレクトリを指します

php7で解析するにはxhprofを使用します
これで、run_id とsave_run のプロジェクト

上部は要求されたインターフェイス インジケーターの概要であり、以下は各呼び出し関数の具体的な実行です。

#フィールド名意味##Calls請求番号##ウォールタイムを含む#呼び出しには、マイクロ秒単位で計算された、サブ関数によって費やされたすべての時間が含まれます#Incl.MemUseサブ関数の実行で使用されるメモリをバイト単位で含みますExcl.MemUseバイト単位で計算された関数実行自体のメモリ ##Incl.PeakMemUseExcl. PeakMemUse

其余后面的 % 结尾均为对应的占比

3.3 [View Full Callgraph]

如果查看调用流程需要安装 graphviz 图形库. 这里我们推荐手动安装 graphviz 2.24.0 这个版本(亲自踩坑,2.40不支持)

 yum -y install libtool-ltdl-develcd /data/graphviz-2.24.0

./configure
make
make install复制代码
php7で解析するにはxhprofを使用します

红色部分和黄色部分重点关心下,如果感觉只想分析某个流程, 可以点击到某个方法里面再点击【View Full Callgraph】查看图表

4. 问题点

我们在上面使用xhprof的时候发现了强依赖, 在代码中引入了 xhprof 安装包里的几个类.

include_once  '/data/xhprof-master/xhprof_lib/utils/xhprof_lib.php';
include_once  '/data/xhprof-master/xhprof_lib/utils/xhprof_runs.php';复制代码

这里我们可以使用composer包引用来实现相同功能, 这里推荐引入 pbweb/xhprof 包。

5. 结束

希望大家工作开心

以上がphp7で解析するにはxhprofを使用しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

エッジPDFビューアが機能していません エッジPDFビューアが機能していません Aug 07, 2025 pm 04:36 PM

testthepdfinanapptodetermineisisiis withthefileoredge.2.enablethebuiltinpdfviewerbyturningoff "Alwaysopenpdffilesexternally" and "downloadpdffiles" inedgesettings.3.Clearbrowsingdataincluding andcachedfilestororeveren

YII開発者:重要な技術的スキルの習得 YII開発者:重要な技術的スキルの習得 Aug 04, 2025 pm 04:54 PM

YIIのマスターになるには、次のスキルを習得する必要があります。1)YIIのMVCアーキテクチャを理解する、2)ActivereCordormの使用に習熟している、3)GIIコード生成ツールを効果的に利用する、4)マスターYIIの検証ルール、5)データベースクエリパフォーマンスを最適化する、6)これらのスキルの学習と実践を通じて、YIIフレームワークの下での開発能力を包括的に改善することができます。

VSエクスプローラーパネルに焦点を当てるコードショートカット VSエクスプローラーパネルに焦点を当てるコードショートカット Aug 08, 2025 am 04:00 AM

VSCODEでは、ショートカットキーを介してパネルと編集領域をすばやく切り替えることができます。左のエクスプローラーパネルにジャンプするには、Ctrl Shift E(Windows/Linux)またはCMD Shift E(MAC)を使用します。編集エリアに戻って、Ctrl `またはescまたはctrl 1〜9を使用します。マウスの操作と比較して、キーボードのショートカットはより効率的であり、エンコードリズムを中断しません。その他のヒントには、ctrl kctrl eフォーカス検索ボックス、f2の名前変更ファイル、ファイルの削除、開いたファイルの入力、矢印キーの展開/崩壊フォルダー。

サブプロセスを実行している例で進みます サブプロセスを実行している例で進みます Aug 06, 2025 am 09:05 AM

OS/execパッケージを使用して子プロセスを実行し、exec.commandを介してコマンドを作成しますが、すぐに実行しません。 2。.output()でコマンドを実行し、stdoutをキャッチします。 Exitコードがゼロ以外の場合は、exec.exiterrorを返します。 3。.start()を使用してブロックせずにプロセスを開始し、.stdoutpipe()と組み合わせて出力をリアルタイムでストリーミングします。 4。.stdinpipe()を介してプロセスにデータを入力し、書き込み後、パイプラインを閉じて.wait()を呼び出して最後を待つ必要があります。 5。Exec.exiterrorは、ゾンビプロセスを避けるために、故障したコマンドの出口コードとstderrを取得するために処理する必要があります。

修正:Windowsアップデートはインストールに失敗しました 修正:Windowsアップデートはインストールに失敗しました Aug 08, 2025 pm 04:16 PM

runthewindowsupdateTroubleshoterviasettings> update&security> troubleShoottoAutoMonissues.2.resetwindowsupDateComponentsは、related -distributionandCatrot2Folders、restartingtherserviceStocleを削除します

PHPの配列の操作方法 PHPの配列の操作方法 Aug 20, 2025 pm 07:01 PM

phparrayshanddedatacollectionseffictifictlyusingindexorassociativeStructures; they recreated witharray()または[]、AccessedViakeys、ModifiedByAssignment、Iterated with foreach、およびmanipulatedUsingfunctionslikecount()、in_array()、Array_key_exists()、Array_exists()、Array_exists()、Array_key_exists()、Array_key_exists()、Array_key_exists()、

修正:イーサネット「未確認のネットワーク」 修正:イーサネット「未確認のネットワーク」 Aug 12, 2025 pm 01:53 PM

RestArtyourRouterandComputERTORESOLETORESOLVETEMPORARYGLITCHES.2.RUNTHENETWORKTROUBLESHOTERVIATHESTYSTEMESTOMESTOMONISTOMATICATELFIXCOMMONISSUES.3.RENEWTHEIPADDRESSUSINGINGINGINGINGINGINGINGINGCommandPromptasAdMinistratoratoratorByRunningIpConfig/リリース、IPConfig/reding、Netshwinsockreset

PHPの特性、抽象クラス、およびインターフェイスを実際のユースケースと比較対照します。 PHPの特性、抽象クラス、およびインターフェイスを実際のユースケースと比較対照します。 Aug 11, 2025 pm 11:17 PM

interfaceStodefinecontractsforunrelatedclasses、sulmentspecificmethodsを保証します

See all articles
#Excl. Wall Time関数自体の実行にかかる時間 (サブツリーの実行時間を除く、マイクロ秒単位で計算)
CPU を含む呼び出しを含む サブ関数によって費やされたすべての CPU 時間
CPU を除く関数自体の実行に費やされた CPU 時間 (サブツリーの実行時間を除く、マイクロ秒単位で計算)
Incl.MemUseのピーク値
Excl.MemUse のピーク