冒頭の言葉
これは純粋なドキュメントです。将来必要になった場合はいつでも参照でき、コードを容易にするための分析に 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);复制代码 出力:
これを見ると、xhprof 拡張機能内の 2 つの関数が呼び出され、出力値の意味がわかりました。
ct 表示 当前这个函数调用的次数,此案例都是1次
wt 表示 函数执行时间的耗时,单位为微秒复制代码 , 取得した情報はそれほど多くないことがわかりました。たとえば、占有メモリ、CPU、その他の指標も気にすることがよくあります。
\xhprof_enable(
XHPROF_FLAGS_MEMORY
+XHPROF_FLAGS_CPU
+XHPROF_FLAGS_NO_BUILTINS
);复制代码 output:
# #XHPROF_FLAGS_MEMORY
統計的なメモリ使用量
XHPROF_FLAGS_CPU
CPU 使用率の統計
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 内にあります。パス (ディレクトリを手動で作成する必要があります)
興味がある場合は、それを開いて見てください。シリアル化されたオブジェクト情報
3.2 分析結果にアクセスするための別のサービスの構成 xhprof プロジェクトの xhprof_html ディレクトリを指します
これで、run_id とsave_run のプロジェクト
上部は要求されたインターフェイス インジケーターの概要であり、以下は各呼び出し関数の具体的な実行です。
#フィールド名意味 ##Calls請求番号 ##ウォールタイムを含む #呼び出しには、マイクロ秒単位で計算された、サブ関数によって費やされたすべての時間が含まれます #Excl. Wall Time 関数自体の実行にかかる時間 (サブツリーの実行時間を除く、マイクロ秒単位で計算) CPU を含む 呼び出しを含む サブ関数によって費やされたすべての CPU 時間 CPU を除く 関数自体の実行に費やされた CPU 時間 (サブツリーの実行時間を除く、マイクロ秒単位で計算) #Incl.MemUse サブ関数の実行で使用されるメモリをバイト単位で含みます Excl.MemUse バイト単位で計算された関数実行自体のメモリ ##Incl.PeakMemUseIncl.MemUseのピーク値 Excl. PeakMemUseExcl.MemUse のピーク 其余后面的 % 结尾均为对应的占比
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复制代码 红色部分和黄色部分重点关心下,如果感觉只想分析某个流程, 可以点击到某个方法里面再点击【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 までご連絡ください。
エッジPDFビューアが機能していません
Aug 07, 2025 pm 04:36 PM
testthepdfinanapptodetermineisisiis withthefileoredge.2.enablethebuiltinpdfviewerbyturningoff "Alwaysopenpdffilesexternally" and "downloadpdffiles" inedgesettings.3.Clearbrowsingdataincluding andcachedfilestororeveren
YII開発者:重要な技術的スキルの習得
Aug 04, 2025 pm 04:54 PM
YIIのマスターになるには、次のスキルを習得する必要があります。1)YIIのMVCアーキテクチャを理解する、2)ActivereCordormの使用に習熟している、3)GIIコード生成ツールを効果的に利用する、4)マスターYIIの検証ルール、5)データベースクエリパフォーマンスを最適化する、6)これらのスキルの学習と実践を通じて、YIIフレームワークの下での開発能力を包括的に改善することができます。
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アップデートはインストールに失敗しました
Aug 08, 2025 pm 04:16 PM
runthewindowsupdateTroubleshoterviasettings> update&security> troubleShoottoAutoMonissues.2.resetwindowsupDateComponentsは、related -distributionandCatrot2Folders、restartingtherserviceStocleを削除します
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
See all articles