亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

PHP 性能分析第二篇: Xhgui In-Depth

leejan97 / 1791人閱讀

摘要:前言這是國外知名博主撰寫的應(yīng)用性能分析系列的第二篇,第一篇介紹,第三篇則關(guān)注于性能調(diào)優(yōu)實踐。單個性能頁面展示了相當(dāng)多的信息。該頁面顯示兩個重要圖表。

【前言】這是國外知名博主 Davey Shafik 撰寫的 PHP 應(yīng)用性能分析系列的第二篇,第一篇介紹 Xhprof/Xhgui,第三篇則關(guān)注于性能調(diào)優(yōu)實踐。

在第一篇中,我們初步介紹了 xhprof,以及如何安裝和運(yùn)行分析器。在本文,我們將介紹 Xhgui——用于審查并比較 xhprof 數(shù)據(jù)的用戶界面(UI)。

使用 Xhgui

Xhgui 提供了許多協(xié)助性能評估的功能,既適用于單次運(yùn)行,也能滿足聚合環(huán)境——讓你精確至具體問題、發(fā)現(xiàn)趨勢。

術(shù)語

為了提高 Xhgui 的使用效率,你需要熟悉許多術(shù)語:

調(diào)用次數(shù):函數(shù)調(diào)用的次數(shù)

[包含] 實際執(zhí)行時間 (wt):函數(shù)實際執(zhí)行時間

[包含] CPU 使用/CPU 用時 (cpu):運(yùn)行該函數(shù) CPU 所用時間

[包含] 內(nèi)存使用 (mu):目前該函數(shù)使用的內(nèi)存量

[包含] 內(nèi)存使用量峰值 (pmu):函數(shù)使用的內(nèi)存高峰

專一實際執(zhí)行時間 (ewt)

專一 CPU 時間 (ecpu)

專一內(nèi)存使用量 (emu)

專一內(nèi)存使用量峰值 (epmu)

術(shù)語2至5都是包含型的測量指標(biāo)(盡管不總是明確指出),這些指標(biāo)會計算函數(shù)及其子函數(shù)的調(diào)用。術(shù)語6至9是專一型的測量指標(biāo)——它們只計算函數(shù)本身的資源調(diào)用。所有的測量數(shù)值都是調(diào)用該函數(shù)后的累計值。(例如,如果一個函數(shù)調(diào)用兩次,第一次用時900毫秒,第二次,因為緩存的緣故,只耗時40毫秒,最終顯示的時間就是940毫秒)。

準(zhǔn)備開始

一旦在 HTTP 服務(wù)器上運(yùn)行 Xhgui ,你首先會看到:

在頂部,你會看到一個菜單,它包含:

Recent — 近期大部分運(yùn)行 (分頁)
Longest wall time — 根據(jù)實際執(zhí)行時間從最慢的運(yùn)行開始排序
Most CPU — 從占用 CPU 時間最多的運(yùn)行開始排序
Most Memory — 從占用內(nèi)存最多的運(yùn)行開始排序
Custom View — 執(zhí)行 mongo DB 自定義查詢
Watch Functions — 應(yīng)該出現(xiàn)在審查頁面頂部的標(biāo)記函數(shù)
Waterfall — 從實驗性視圖查看并發(fā)請求的相互影響

在本教程中,我選擇分析用 Wordpress 搭建的網(wǎng)站性能?;ヂ?lián)網(wǎng)上多于18%的網(wǎng)站都是基于 Wordpress 搭建的,這意味著,即便是對 Wordpress 很小的性能改進(jìn), 亦能產(chǎn)生巨大影響。

查看一次運(yùn)行的性能數(shù)據(jù)

分析了幾個頁面的性能(或?qū)肓宋募?之后,你會看到它們羅列在 Xhgui :

查看一次運(yùn)行的性能數(shù)據(jù),只需點擊日期。

通過單擊適當(dāng)?shù)谋眍^,你可以根據(jù)實際執(zhí)行時間 (wt) , CPU 時間 (CPU) 、內(nèi)存使用量 (mu) 或 內(nèi)存使用量峰值 (pmu) 查看這些運(yùn)行情況。從而輕易找出最慢的頁面。

單個性能頁面展示了相當(dāng)多的信息。在左側(cè)可以看到運(yùn)行的總體情況,以及運(yùn)行時的環(huán)境數(shù)據(jù),包括 GET (或 POST) 數(shù)據(jù)和服務(wù)器數(shù)據(jù):

在右側(cè),展示了 watch function 列表:

該表詳細(xì)列出了函數(shù)名稱,調(diào)用次數(shù) ,專一實際執(zhí)行時間 (ewt), 專一內(nèi)存使用量(emu)、和專一內(nèi)存使用峰值(epmu)。此外,你可能會注意到頁面頂部的兩個按鈕,“View Callgraph(查看調(diào)用圖)” 和 “Compare this run(對比此次運(yùn)行)”。

接下來,我們看到兩個圖。圖一展示了專一實際執(zhí)行時間最長的六個函數(shù),該時間是用在函數(shù)本身的時間(不包含任何子函數(shù)調(diào)用所占的時間)。圖二展示內(nèi)存使用量最大的六個函數(shù)。這些圖通常能將你指向性能瓶頸。

函數(shù)的細(xì)節(jié)在下方列出。如果將鼠標(biāo)滑過圖中的圓柱,這些信息也將出現(xiàn)在提示框中。

最后,我們看到性能分析器收集到的大宗信息——函數(shù)列表:

該表包含一個浮動的標(biāo)題欄(即便鼠標(biāo)向下滾動,該欄目也會保持在屏幕頂端),包含函數(shù)名,調(diào)用次數(shù),和前面提到的專一和包含的測量值。

默認(rèn)情況下,該表按專一實際執(zhí)行時間排序,時間最長者排在首位。通常你不會想改變這一次序,因為這讓你快速找出運(yùn)行最慢的函數(shù),除非你想看內(nèi)存使用量。

當(dāng)你想查看一個函數(shù)的運(yùn)行情況時,點擊該函數(shù),會跳轉(zhuǎn)到其詳細(xì)頁面。該頁面首先會遞歸展示函數(shù)本身的細(xì)節(jié)。接下來, “Parent Functions(父函數(shù))” 部分列出所有直接調(diào)用該函數(shù)的函數(shù)。最后,“Child Functions(子函數(shù))”列出該函數(shù)直接調(diào)用的其他函數(shù)。

父函數(shù)按照專一實際運(yùn)行時間,列出標(biāo)準(zhǔn)列表數(shù)據(jù)。

你需要確定:是函數(shù)本身運(yùn)行緩慢,還是調(diào)用它的次數(shù)太多導(dǎo)致累積的實際執(zhí)行時間太長。通過檢查該函數(shù)的調(diào)用計數(shù),然后回顧其父函數(shù)列表。

如果你覺得函數(shù)調(diào)用次數(shù)沒問題,你就要看看子函數(shù)運(yùn)行情況。此處才是函數(shù)運(yùn)行消耗時間的部分。

子函數(shù)只顯示包含測量值;這是因為你想很快找到耗時最長的代碼路徑。

你可以點擊每個子函數(shù),下鉆到相同的細(xì)節(jié)視圖,并進(jìn)行相同的分析。

比較性能數(shù)據(jù)

Xhgui 最好的特性在于比較兩個不同的運(yùn)行。這使你:

修改系統(tǒng) (如啟用 opcache , mysql 查詢緩存) 并比較結(jié)果

修改代碼(代碼或 SQL 優(yōu)化)并比較結(jié)果

將異常的運(yùn)行與“正?!边\(yùn)行比較

比較兩個運(yùn)行時,你必須首先選擇一個基礎(chǔ)運(yùn)行。點擊其日期就能看到該運(yùn)行的詳細(xì)信息頁。

接下來,單擊右上角的“Compare this run” 按鈕:

接著會跳轉(zhuǎn)到同一 URL 下的運(yùn)行列表,你可以選擇一個進(jìn)行比較:

點擊你想進(jìn)行比較的運(yùn)行的 "Compare" 按鈕,將跳轉(zhuǎn)到比較頁面。

比較視圖只顯示兩個運(yùn)行之間的差異。在頁面頂部顯示比較中的兩個運(yùn)行,以及一些輔助修改排序的按鈕。

接下來是概覽:

盡管這個表的所有信息都有用,但特別值得注意的兩個差別是 "函數(shù)調(diào)用次數(shù)" 和 "專一實際運(yùn)行時間" 。

函數(shù)調(diào)用次數(shù)的差別暗示著兩次運(yùn)行的重要差異:不同的代碼路徑或緩存。第一個差別可能是有意的優(yōu)化導(dǎo)致的,但若這并非你的目的,比較這兩個運(yùn)行很可能不會有太大的價值。另一方面,緩存是有益且有效的提高性能的方式。這種比較很容易驗證緩存是否發(fā)生。

包含實際執(zhí)行時間的百分比差展示了性能調(diào)優(yōu)的實際成果。理想情況下,我們將看到一個較小的百分比——這是第二運(yùn)行時間比上第一次運(yùn)行時間的占比。在截圖中,第二次運(yùn)行只花了第一次運(yùn)行79%的時間,這意味著性能提升了21%。

最后,我們看到功能細(xì)節(jié):

請記住,該視圖只展示差別。差別通過綠色的負(fù)數(shù)和紅色的正數(shù)表示。(負(fù)數(shù)表明調(diào)用次數(shù)更少,實際執(zhí)行時間更短,CPU 耗時更短或內(nèi)存消耗更少)如果沒有差異,則顯示為灰色的0。

與其他表一樣,您可以在任意列進(jìn)行排序,默認(rèn)的順序方式是函數(shù)的調(diào)用次序。

在這里你可以驗證,你做的改變是否確有效果,是否為預(yù)期效果。你也可以在性能下降時使用該視圖追蹤原因。

性能提高的一個好例子是:基于一個條件只調(diào)用一個函數(shù)——例如,您可能不需要過濾數(shù)據(jù),如果之前已經(jīng)做了。

當(dāng)你做出這種改變時,你會預(yù)期過濾函數(shù)的調(diào)用次數(shù)減少,從而性能提升。

這兩件事都可以在此處得到驗證,以及其他意想不到的原因——你的條件比過濾本身需要更長的時間?如果真是如此,這將對性能產(chǎn)生負(fù)面影響。

在此處,我們可以看到, NOOP_Translations::translate 和 apply_filter 的調(diào)用次數(shù)都減少了,但是 apply_filter 的專一內(nèi)存使用量增加了133560個字節(jié)!

發(fā)現(xiàn)趨勢

對我來說,Xhgui 最強(qiáng)大的功能是查看趨勢。因為 xhprof 是被動分析器,可以在所有環(huán)境中啟用 (dev、qa、階段性、生產(chǎn)),可以持續(xù)地對流量取樣分析。

審查給定 URL 的所有數(shù)據(jù),只需在運(yùn)行列表點擊它:

這將跳轉(zhuǎn)到該 URL 運(yùn)行頁面。

該頁面顯示兩個重要圖表。第一個顯示實際運(yùn)行時間和 CPU 時間,第二個顯示內(nèi)存使用情況和峰值內(nèi)存使用。這些圖表列表中運(yùn)行的數(shù)據(jù),包括每次運(yùn)行的 URL,時間,實際運(yùn)行時間、CPU時間、內(nèi)存使用和峰值。

這些圖是查看趨勢和異常值的關(guān)鍵所在。但是該如何處理這些信息呢?

對于數(shù)據(jù)異常者,首先你可以將鼠標(biāo)懸浮在它上面驗明正身,接著,你可以看一下它的單次運(yùn)行?;蛴闷渌_\(yùn)行與其比較,從而發(fā)現(xiàn)不同。

對于趨勢,最好的選擇是審查趨勢開始的時間——你在此時添加緩存了嗎?隨著緩存變得更加完整,整體趨勢應(yīng)該向下。或者你的緩存失效,你將看到一個上升趨勢,此時緩存正在重建。

默認(rèn)情況下,這些圖表顯示最近100次運(yùn)行,你可以點擊下一頁去查看更久遠(yuǎn)時間的運(yùn)行。

另外,你可以點擊搜索按鈕來定制顯示的界面:

單擊該按鈕將顯示搜索表單:

你可以搜索具體日期之間的運(yùn)行。也可以查看最近30分鐘、1小時、2小時、12小時、24小時、1周、2周或30天內(nèi)的運(yùn)行——更小的時間間隔適合評估性能調(diào)優(yōu)的結(jié)果。

最后,你可以使用 PHPs DateTimeIntervalInterval 規(guī)范格式指定自定義時間區(qū)間——例如,最近2天可使用 P2D,最近15分鐘可使用 PT15M。

Watch Functions

Watch functions 允許你通過正則表達(dá)式識別特定的函數(shù),或函數(shù)組,并顯示在單個運(yùn)行頁面(見前文)。

因為可以使用正則表達(dá)式,我們可以輕易地查看一個模塊或擴(kuò)展中的功能。

For example, to watch all MySQL activity, simply add one of the following:
例如,查看所有 MySQL 活動,只需添加如下列表的任意一項:

mysql_(.*)for ext/mysql

mysqli(.*)for ext/mysqli

pdo(.*)for PDO (適用于所有PDO-based數(shù)據(jù)庫交互)

如果你使用諸如 Propel 的 ORM,你可能使用 (.)Query::(.) 追蹤所有 Query 類。

調(diào)用圖(Callgraphs)

Xhprof 的最后一部分是調(diào)用圖 ,該圖展示運(yùn)行的代碼執(zhí)行路徑。

點擊單一運(yùn)行頁面頂部的“View Callgraph”按鈕即可查看調(diào)用圖。

在調(diào)用圖中,拖拽結(jié)點可以更好地查看數(shù)據(jù)。鼠標(biāo)懸浮在每個點擊上,會顯示其包含實際執(zhí)行時間,同時允許你進(jìn)入該函數(shù)的詳情頁。

更直觀地查看圖,請點擊:
體驗免費(fèi)使用OneAPM在線PHP應(yīng)用性能分析SaaS服務(wù)!

下一章節(jié)

在第三部分也即最后一部分,我們會使用 xhprof 數(shù)據(jù)來優(yōu)化代碼。我們也會簡單地介紹其他優(yōu)化代碼的工具。
(本文系應(yīng)用性能管理領(lǐng)軍企業(yè) OneAPM 工程師編譯整理)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/21139.html

相關(guān)文章

  • PHP 性能分析第三篇: 性能調(diào)優(yōu)實戰(zhàn)

    摘要:注意本文是我們的性能分析系列的第三篇,點此閱讀性能分析第一篇介紹,或性能分析第二篇深入研究。小的性能提升很可能來自優(yōu)化,而非緩存。注意此更改已提交到并已獲更新。目前,兩者具備相同的特性,只有一些部分重命名了。 注意:本文是我們的 PHP 性能分析系列的第三篇,點此閱讀?PHP 性能分析第一篇: XHProf & XHGui 介紹?,或??PHP 性能分析第二篇: 深入研究 XHGui...

    cnsworder 評論0 收藏0
  • PHP 性能分析第一篇: Xhprof & Xhgui 介紹

    摘要:注這是我們應(yīng)用性能分析系列的第一篇,閱讀第二篇可深入了解,第三篇則關(guān)注于性能調(diào)優(yōu)實踐。性能分析的行為也會影響應(yīng)用性能。主動被動性能分析主動分析器在開發(fā)過程中使用,由開發(fā)人員啟用。它對性能的影響最小,同時收集足夠的信息用于診斷性能問題。 注:這是我們 PHP 應(yīng)用性能分析系列的第一篇,閱讀第二篇可深入了解 xhgui,第三篇則關(guān)注于性能調(diào)優(yōu)實踐。 什么是性能分析? 性能分析是衡量應(yīng)用程...

    RdouTyping 評論0 收藏0
  • laradock中使用xhprof、xhgui

    摘要:在環(huán)境中使用,性能分析擴(kuò)展因為沒有擴(kuò)展,所以先要自己修改的文件加入擴(kuò)展先在上現(xiàn)在,我下載的是,然后在中新建并配置,,內(nèi)容最后修改文件,我用的是的所有,修改如下注文件夾在中,結(jié)構(gòu)最后在目錄下,重新編譯即可,查看擴(kuò)展第二步下載下 在laradock環(huán)境中使用,xhprof性能分析擴(kuò)展: 因為laradock沒有xhprof擴(kuò)展,所以先要自己修改php-fpm的Dockerfile文件,加入...

    蘇丹 評論0 收藏0
  • 使用XHProf分析PHP性能瓶頸(二)

    摘要:上一篇文章里,我們介紹了如何基于擴(kuò)展來分析性能,并記錄到日志里,最后使用擴(kuò)展自帶的在里展示出來。本次測試中,實際使用了擴(kuò)展切換為擴(kuò)展后里看不到數(shù)據(jù),原因未知。雖然來自但已經(jīng)很久不更新,官方源已經(jīng)顯示此包已廢棄,不再維護(hù)。 上一篇文章里,我們介紹了如何基于xhprof擴(kuò)展來分析PHP性能,并記錄到日志里,最后使用xhprof擴(kuò)展自帶的UI在web里展示出來。本篇文章將講述2個知識點: ...

    Worktile 評論0 收藏0
  • PHP性能被動分析工具之xhgui加tideways的安裝實踐

    摘要:性能被動分析工具之加的安裝實踐前言最近一直想做個接口性能分析,但是手打?qū)嵲谀馨讶私o累死。怎么辦呢想到之前有寫過一篇我所知道的相關(guān)調(diào)優(yōu)匯總,里面有一個的調(diào)優(yōu)方式。但是使用它酷炫的需要付費(fèi),擴(kuò)展則不需要。 PHP性能被動分析工具之xhgui加tideways的安裝實踐 By:0x584A Date:2016-11-23 17:55:42 前言 最近一直想做個接口性能分析,但是手打log實在...

    Chiclaim 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<