搜尋
首頁後端開發PHP問題如何使用PHP中的層次效能分析器

本篇文章簡單介紹一下PHP中的層次效能分析器。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

如何使用PHP中的層次效能分析器

在 PHP 中,我們需要進行偵錯的時候,一般都會使用 memory_get_usage() 看下記憶體的使用情況。但如果想看目前的腳本 CPU 的佔用就沒有什麼現成的函數了。

不過,PHP 也為我們提供了一個擴展:XHProf ,這是由 FaceBook 開源的一個擴展,它可以幫我們看到當前腳本運行時的一些效能。

什麼是 XHProf

XHProf 是一個輕量級的分層效能測量分析器。在資料收集階段,它追蹤呼叫次數與測量數據,展示程式動態呼叫的弧線圖。它在報表、後製階段計算了獨佔的效能度量,例如運行經過的時間、CPU 運算時間和記憶體開銷。

 函數效能報告可以由呼叫者和被呼叫者終止。在資料蒐集階段 XHProf 透過呼叫圖的循環來偵測遞歸函數,透過賦予唯一的深度名稱來避免遞歸呼叫的循環。

簡單來說,XHProf 就是能為我們收集很多程式去得時的系統狀態,並且它自帶一套線上圖表工具,能夠為我們提供詳盡的圖表資訊。

安裝

直接在 PECL 下載安裝擴充包即可。和其它的擴充安裝並沒有什麼兩樣,這個擴充功能一直在更新維護狀態中,所以對於 PHP7 版本都是完美支援的。

命令列使用

xhprof_enable(XHPROF_FLAGS_NO_BUILTINS | XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);

//xhprof_enable( XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY);

//xhprof_enable( XHPROF_FLAGS_MEMORY);

//xhprof_enable();

for ($i = 0; $i <= 1000; $i++) {
    $a = $i * $i;
}

function test_application(){
    for ($i = 0; $i <= 1000; $i++) {
            $a = $i * $i;
    }
}

test_application();


$xhprof_data = xhprof_disable();

print_r($xhprof_data);

// Array
// (
//     [main()==>test_application] => Array
//         (
//             [ct] => 1
//             [wt] => 16
//             [cpu] => 21
//             [mu] => 848
//             [pmu] => 0
//         )

//     [main()] => Array
//         (
//             [ct] => 1
//             [wt] => 115
//             [cpu] => 115
//             [mu] => 1416
//             [pmu] => 0
//         )

// )

使用xhprof_enable() 啟用分析器,它的參數是幾個常數,大概的意思是顯示CPU 資訊、記憶體資訊等,如果沒有參數的話則只會回傳ct 、 wt 這兩個參數。

呼叫 xhprof_disable() 結束分析並傳回分析結果,傳回值的內容包含 main 主函數的運行情況,也就是我們目前頁面測試程式碼的情況。還有呼叫的函數 test_application() 函數的效能情況。具體內容為:

  • ct:呼叫次數

  • wt:等待執行時間長,毫秒

  • cpu:cpu 運行時長,毫秒

  • mu:記憶體使用,位元組

  • pmu:記憶體使用峰值

沒錯,就是這麼簡單的內容。透過兩個函數的呼叫我們就能看到目前腳本程式的運作狀態,佔用了多少記憶體、耗費了多少 cpu 時長。當然,更方便的是,它還可以透過 web 頁面顯示更詳細的資訊。

web 查看結果報告

首先,我們需要做一些準備。一是要安裝一個 graphviz 用於圖形繪製,二是修改 php.ini 檔案的結果存放目錄,三是拷貝原始碼中的分析器程式碼並修改一下我們之前的測試程式碼。

yum install graphviz

CentOS 系統中我們直接使用 yum 就可以安裝 graphviz 。然後我們在 php.ini 檔案中為 xhprof 指定一下輸出目錄。

xhprof.output_dir=/tmp

接下來,我們需要將原始碼檔案中的 xhporf_html 目錄和 xhporf_lib 目錄拷貝出來放到專案檔案下。然後修改程式碼來保存效能分析的結果。

// ..... 上面的代码
$xhprof_data = xhprof_disable();

require &#39;xhprof_lib/utils/xhprof_lib.php&#39;;
require &#39;xhprof_lib/utils/xhprof_runs.php&#39;;

$xhprofRuns = new XHProfRuns_Default();
$runId = $xhprofRuns->save_run($xhprof_data, &#39;xhprof_test&#39;);

echo &#39;http://192.168.56.102/index.php?run=&#39; . $runId . &#39;&source=xhprof_test&#39;;

然後我們需要在 xhporf_html 搭起伺服器,在這裡我就用簡單的 php -S 指令運行。

cd xhprof_html/
php -S 0.0.0.0:80

最後用上面輸出的連結來造訪這個頁面,就可以看到相關的資訊了。

總結

今天的測試程式碼只是簡單的學習入門了一下 xhporf 的使用。其實這個擴充功能以及這套分析工具是可以整合到我們真實專案的框架中的。這樣,在測試環境我們就可以很好地監控目前程式的運作狀態。不過,還是不太建議放在正式環境中使用,畢竟 Debug 或這種效能分析的東西都不要對外,在正式環境,我們可以在命令列進行分析調優。

測試程式碼:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/%E7%AE%80%E5%8D%95%E5%AD%A6%E4%B9%A0PHP%E4%B8%AD%E7%9A%84%E5%B1%82%E6%AC%A1%E6%80%A7%E8%83%BD%E5%88%86%E6%9E%90%E5%99%A8.php

推薦學習:php影片教學

#

以上是如何使用PHP中的層次效能分析器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:segmentfault。如有侵權,請聯絡admin@php.cn刪除
酸與基本數據庫:差異和何時使用。酸與基本數據庫:差異和何時使用。Mar 26, 2025 pm 04:19 PM

本文比較了酸和基本數據庫模型,詳細介紹了它們的特徵和適當的用例。酸優先確定數據完整性和一致性,適合財務和電子商務應用程序,而基礎則側重於可用性和

PHP安全文件上傳:防止與文件相關的漏洞。PHP安全文件上傳:防止與文件相關的漏洞。Mar 26, 2025 pm 04:18 PM

本文討論了確保PHP文件上傳的確保,以防止諸如代碼注入之類的漏洞。它專注於文件類型驗證,安全存儲和錯誤處理以增強應用程序安全性。

PHP輸入驗證:最佳實踐。PHP輸入驗證:最佳實踐。Mar 26, 2025 pm 04:17 PM

文章討論了PHP輸入驗證以增強安全性的最佳實踐,重點是使用內置功能,白名單方法和服務器端驗證等技術。

PHP API率限制:實施策略。PHP API率限制:實施策略。Mar 26, 2025 pm 04:16 PM

本文討論了在PHP中實施API速率限制的策略,包括諸如令牌桶和漏水桶等算法,以及使用Symfony/Rate-limimiter之類的庫。它還涵蓋監視,動態調整速率限制和手

php密碼哈希:password_hash和password_verify。php密碼哈希:password_hash和password_verify。Mar 26, 2025 pm 04:15 PM

本文討論了使用password_hash和pyspasswify在PHP中使用密碼的好處。主要論點是,這些功能通過自動鹽,強大的哈希算法和SECH來增強密碼保護

OWASP前10 php:描述並減輕常見漏洞。OWASP前10 php:描述並減輕常見漏洞。Mar 26, 2025 pm 04:13 PM

本文討論了OWASP在PHP和緩解策略中的十大漏洞。關鍵問題包括注射,驗證損壞和XSS,並提供用於監視和保護PHP應用程序的推薦工具。

PHP XSS預防:如何預防XSS。PHP XSS預防:如何預防XSS。Mar 26, 2025 pm 04:12 PM

本文討論了防止PHP中XSS攻擊的策略,專注於輸入消毒,輸出編碼以及使用安全增強的庫和框架。

PHP接口與抽像類:何時使用。PHP接口與抽像類:何時使用。Mar 26, 2025 pm 04:11 PM

本文討論了PHP中接口和抽像類的使用,重點是何時使用。界面定義了無實施的合同,適用於無關類和多重繼承。摘要類提供常見功能

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境