摘要:注這是我們應(yīng)用性能分析系列的第一篇,閱讀第二篇可深入了解,第三篇?jiǎng)t關(guān)注于性能調(diào)優(yōu)實(shí)踐。性能分析的行為也會(huì)影響應(yīng)用性能。主動(dòng)被動(dòng)性能分析主動(dòng)分析器在開(kāi)發(fā)過(guò)程中使用,由開(kāi)發(fā)人員啟用。它對(duì)性能的影響最小,同時(shí)收集足夠的信息用于診斷性能問(wèn)題。
注:這是我們 PHP 應(yīng)用性能分析系列的第一篇,閱讀第二篇可深入了解 xhgui,第三篇?jiǎng)t關(guān)注于性能調(diào)優(yōu)實(shí)踐。
什么是性能分析?性能分析是衡量應(yīng)用程序在代碼級(jí)別的相對(duì)性能。性能分析將捕捉的事件包括:CPU的使用,內(nèi)存的使用,函數(shù)的調(diào)用時(shí)長(zhǎng)和次數(shù),以及調(diào)用圖。性能分析的行為也會(huì)影響應(yīng)用性能。
影響的程度取決于基準(zhǔn)測(cè)試。基準(zhǔn)測(cè)試在外部執(zhí)行,用于衡量應(yīng)用真實(shí)性能。所謂真實(shí)性能,即終端用戶所體驗(yàn)的應(yīng)用表現(xiàn)。
什么時(shí)候應(yīng)該進(jìn)行性能分析?在考慮是否進(jìn)行性能分析時(shí),你首先要想:應(yīng)用是否存在性能問(wèn)題?如果有,你要進(jìn)一步考慮:這個(gè)問(wèn)題有多大?
如果你不這樣做,將會(huì)陷入一個(gè)陷阱——過(guò)早優(yōu)化,這可能會(huì)浪費(fèi)你的時(shí)間。
為了評(píng)斷應(yīng)用是否存在性能問(wèn)題,你應(yīng)該確定性能目標(biāo)。例如,100個(gè)并發(fā)用戶的響應(yīng)時(shí)間小于1s。然后,你需要進(jìn)行基準(zhǔn)測(cè)試,看是否達(dá)到這個(gè)目標(biāo)。一個(gè)常見(jiàn)的錯(cuò)誤是,在開(kāi)發(fā)環(huán)境進(jìn)行基準(zhǔn)測(cè)試。事實(shí)上,你必須在生產(chǎn)環(huán)境進(jìn)行基準(zhǔn)測(cè)試。(實(shí)際生產(chǎn)環(huán)境或模擬的生產(chǎn)環(huán)境,后者很容易在 SaaS 實(shí)現(xiàn)(見(jiàn):OneAPM 性能在線分析)。
用于基準(zhǔn)測(cè)試的產(chǎn)品很多,包括 ab,siege 和 JMeter。我個(gè)人比較喜歡JMeter的功能集,但 ab 和 siege 更加易用。
一旦你確定應(yīng)用存在性能問(wèn)題,就需要分析其性能,實(shí)施改進(jìn),然后再一次進(jìn)行基準(zhǔn)測(cè)試,查看問(wèn)題是否解決。每一次變更之后,你都該進(jìn)行基準(zhǔn)測(cè)試查看效果。如果你做了很多變更,卻發(fā)現(xiàn)應(yīng)用性能有所下降,你就無(wú)法確定具體是哪一次變更導(dǎo)致了這個(gè)問(wèn)題。
下圖是我定義的性能生命周期:
性能下降的一般原因導(dǎo)致性能下降的一般原因中,有些相當(dāng)出人意料。即便是像 PHP 這樣的高級(jí)語(yǔ)言,代碼的好壞也很少是問(wèn)題的根源。在當(dāng)今的硬件配置條件下,CPU 很少是性能限制的原因。常見(jiàn)的原因反而是:
數(shù)據(jù)存儲(chǔ)
PostgreSQL
MySQL
Oracle
MSSQL
MongoDB
Riak
Cassandra
Memcache
CouchDB
Redis
外部資源
APIs
文件系統(tǒng)
網(wǎng)絡(luò)接口
外部流程
糟糕的代碼
選擇哪一種性能分析器?在 PHP 世界里,有兩個(gè)截然不同的的性能分析器——主動(dòng)和被動(dòng)。
主動(dòng) VS 被動(dòng)性能分析主動(dòng)分析器在開(kāi)發(fā)過(guò)程中使用,由開(kāi)發(fā)人員啟用。主動(dòng)分析器收集的信息比被動(dòng)分析器多,對(duì)性能的影響更大。通常,主動(dòng)分析器不能用在生產(chǎn)環(huán)境中。Xdebug 就是一種主動(dòng)分析器。
因?yàn)闊o(wú)法在生產(chǎn)環(huán)境中使用主動(dòng)分析器,F(xiàn)acebook 推出了一個(gè)被動(dòng)分析器——XHprof。XHprof 是為了在生產(chǎn)環(huán)境中使用而打造的。它對(duì)性能的影響最小,同時(shí)收集足夠的信息用于診斷性能問(wèn)題。XHprof 和 OneAPM 都是被動(dòng)分析器。
通常,Xdebug 收集的額外信息對(duì)于一般的性能問(wèn)題分析并不必要。這意味著,被動(dòng)分析器是用于不間斷性能分析的更佳選擇,即使是在開(kāi)發(fā)環(huán)境中。
Xhprof + XhguiXhprof 由 Facebook 開(kāi)發(fā)的,包含一個(gè)基本的用戶界面用于查看性能數(shù)據(jù)。此外,Paul Reinheimer 開(kāi)發(fā)了 Xhgui 和一個(gè)增強(qiáng)的用戶界面(UI)用于查看、比較和分析性能數(shù)據(jù)。
安裝 安裝 XHPROFXhprof 可通過(guò) PECL 安裝,步驟如下:
$pecl install xhprof-beta
該 pecl 命令將嘗試自動(dòng)更新你的 php.ini 設(shè)置。pecl 嘗試更新的文件可以使用以下命令找到:
$ pecl config-getphp_ini
它會(huì)在指定的文件(如果有的話)頂部增加新的配置行。你可能想把他們移到一個(gè)更合適的位置。
一旦你編譯了該擴(kuò)展程序,您必須啟用它。為此,您需要在 PHP INI 文件添加以下代碼:
[xhprof] extension=xhprof.so
之后,結(jié)合 Xhgui 就能輕松地執(zhí)行性能分析與檢查。
安裝 XHGUI安裝 Xhgui,必須直接從 git 獲取。該項(xiàng)目可以在 github 上找到,地址為 https://github.com/perftools/xhgui
Xhgui 要求:
PHP 5.3+
ext/mongo
composer
MongoDB(若只需要收集數(shù)據(jù),則可選可不選;若需要數(shù)據(jù)分析,則為必選)
首先,克隆項(xiàng)目到任意位置。在基于 Debian 的 Linux 系統(tǒng)(例如 Ubuntu 等等),可能是 /var/www。在 Mac OS X 系統(tǒng),可能是 /Library/WebServer/Documents。
$cd /var/www $ git clone https://github.com/perftools/xhgui.git $ cd xhgui $ php install.php
最后一個(gè)命令是運(yùn)行 composer 以安裝依賴并檢查 xhgui 緩存目錄的權(quán)限。如果失敗,你可以手動(dòng)運(yùn)行 composer install。
下一步,你可能需要?jiǎng)?chuàng)建配置文件。這一步很容易實(shí)現(xiàn),可以使用在 /path/to/xhgui/config/config.default.php 下的默認(rèn)配置文件。
如果你在本地運(yùn)行 mongodb ,沒(méi)有身份驗(yàn)證,則可能不需要這樣做。因?yàn)樗鼘⒒赝藶槟J(rèn)值。而在多服務(wù)器環(huán)境中,你會(huì)需要一個(gè)所有服務(wù)器都能進(jìn)行存儲(chǔ)的遠(yuǎn)程 mongodb 服務(wù)器,并進(jìn)行恰當(dāng)?shù)呐渲谩?/p>
為提高 MongoDB 的性能,你可以運(yùn)行以下指令以添加索引:
$ mongo
其他配置use xhprof
如果你不想在生產(chǎn)環(huán)境中安裝 mongo ,或無(wú)法讓 Web 服務(wù)器訪問(wèn) mongo 服務(wù)器,您可以將性能分析數(shù)據(jù)保存在磁盤中,再導(dǎo)入到本地MongoDB 供以后分析。
為此,請(qǐng)?jiān)?config.php 中進(jìn)行以下修改:
"/path/to/xhgui/xhprof-" .uniqid("", true). ".dat", ?>
改變文件中的 save.handler,然后取消批注 save.handler.filename ,為其賦一個(gè)恰當(dāng)?shù)闹怠?
注意:默認(rèn)每天只保存一個(gè)分析文件。
一旦分析數(shù)據(jù)的準(zhǔn)備就緒,你就可以使用 xhgui 附帶的腳本導(dǎo)入之:
$ php /path/to/xhgui/external/import.php /path/to/file.dat
在此之后的步驟都相同。
運(yùn)行 XhguiXhgui 是以 PHP 為基礎(chǔ)的 Web 應(yīng)用程序,你可以以 /path/to/xhgui/webroot為根文件,設(shè)置一個(gè)標(biāo)準(zhǔn)的虛擬主機(jī)。
或者,你可以簡(jiǎn)單地使用 PHP 5.4 + cli-server 例如:
$cd/path/to/xhgui $ php -S0:8080-t webroot/
這將使 Xhgui 在所有網(wǎng)絡(luò)接口都可通過(guò) 8080 端口進(jìn)行通信。
運(yùn)行性能分析器運(yùn)行分析器時(shí),你需要在待分析的所有頁(yè)面包含 external/header.php 腳本。為此,你可以在 PHP ini 文件設(shè)置 auto_prepend_file 。你既可以直接在公共 INI 文件進(jìn)行設(shè)置,也可以限制到單一的虛擬主機(jī)。
對(duì)于 Apache 服務(wù)器,添加以下代碼:
php_admin_value auto_prepend_file "/path/to/xhgui/external/header.php"
對(duì)于 Nginx 服務(wù)器,在服務(wù)器配置中添加以下代碼:
fastcgi_param PHP_VALUE "auto_prepend_file=/path/to/xhgui/external/header.php";
如果您使用 PHP 5.4 + cli-server(PHP - S),則必須通過(guò)命令行標(biāo)記進(jìn)行設(shè)置:
$ php -S 0:8080 -dauto_prepend_file=/path/to/xhgui/external/header.php
默認(rèn)情況下,分析器運(yùn)行時(shí)只分析(大約)1%的請(qǐng)求。這是由以下 external/header.php 代碼控制的:
如果你想分析每一個(gè)請(qǐng)求(例如,在開(kāi)發(fā)階段),你可以將這段代碼注釋掉。如果你想讓分析10%的請(qǐng)求,你可以做如下改動(dòng):
這允許你對(duì)一小部分用戶請(qǐng)求進(jìn)行分析,而不過(guò)多影響單個(gè)用戶或太多用戶。
如果你想在性能分析時(shí)進(jìn)行手動(dòng)控制,你可以這樣做:
這段代碼會(huì)檢查一個(gè)隨機(jī)命名的 GET/POST/COOKIE 變量(在此例中為:A9v3XUsnKX3aEiNsUDZzV),同時(shí)創(chuàng)建一個(gè)同名的 Cookie ,用于分析該請(qǐng)求的整個(gè)過(guò)程,例如:表單提交后的重定向,Ajax 請(qǐng)求等等。
此外,它允許一個(gè)名為 no-A9v3XUsnKX3aEiNsUDZzV 的 GET/POST 變量來(lái)刪除 cookie ,停止分析。
當(dāng)然,我們歡迎大家嘗試使用 OneAPM 來(lái)為您的 PHP 和 Java 應(yīng)用做免費(fèi)的性能分析。OneAPM 獨(dú)有的探針能夠深入到所有 PHP 和 Java 應(yīng)用內(nèi)部完成應(yīng)用性能管理和監(jiān)控,包括代碼級(jí)別性能問(wèn)題的可見(jiàn)性、性能瓶頸的快速識(shí)別與追溯、真實(shí)用戶體驗(yàn)監(jiān)控、服務(wù)器監(jiān)控和端到端的應(yīng)用性能管理。 OneAPM 可以追溯到性能表現(xiàn)差的 SQL 語(yǔ)句 Traces 記錄、性能表現(xiàn)差的第三方 API、Web 服務(wù)、Cache 等等。
在下一篇文章中,我們將深入研究 Xhgui ,以及用于展示、比較 xhprof 數(shù)據(jù)的用戶界面 。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21117.html
摘要:注意本文是我們的性能分析系列的第三篇,點(diǎn)此閱讀性能分析第一篇介紹,或性能分析第二篇深入研究。小的性能提升很可能來(lái)自優(yōu)化,而非緩存。注意此更改已提交到并已獲更新。目前,兩者具備相同的特性,只有一些部分重命名了。 注意:本文是我們的 PHP 性能分析系列的第三篇,點(diǎn)此閱讀?PHP 性能分析第一篇: XHProf & XHGui 介紹?,或??PHP 性能分析第二篇: 深入研究 XHGui...
摘要:前言這是國(guó)外知名博主撰寫(xiě)的應(yīng)用性能分析系列的第二篇,第一篇介紹,第三篇?jiǎng)t關(guān)注于性能調(diào)優(yōu)實(shí)踐。單個(gè)性能頁(yè)面展示了相當(dāng)多的信息。該頁(yè)面顯示兩個(gè)重要圖表。 【前言】這是國(guó)外知名博主 Davey Shafik 撰寫(xiě)的 PHP 應(yīng)用性能分析系列的第二篇,第一篇介紹 Xhprof/Xhgui,第三篇?jiǎng)t關(guān)注于性能調(diào)優(yōu)實(shí)踐。 在第一篇中,我們初步介紹了 xhprof,以及如何安裝和運(yùn)行分析器。在本文,...
摘要:上一篇文章里,我們介紹了如何基于擴(kuò)展來(lái)分析性能,并記錄到日志里,最后使用擴(kuò)展自帶的在里展示出來(lái)。本次測(cè)試中,實(shí)際使用了擴(kuò)展切換為擴(kuò)展后里看不到數(shù)據(jù),原因未知。雖然來(lái)自但已經(jīng)很久不更新,官方源已經(jīng)顯示此包已廢棄,不再維護(hù)。 上一篇文章里,我們介紹了如何基于xhprof擴(kuò)展來(lái)分析PHP性能,并記錄到日志里,最后使用xhprof擴(kuò)展自帶的UI在web里展示出來(lái)。本篇文章將講述2個(gè)知識(shí)點(diǎn): ...
摘要:性能被動(dòng)分析工具之加的安裝實(shí)踐前言最近一直想做個(gè)接口性能分析,但是手打?qū)嵲谀馨讶私o累死。怎么辦呢想到之前有寫(xiě)過(guò)一篇我所知道的相關(guān)調(diào)優(yōu)匯總,里面有一個(gè)的調(diào)優(yōu)方式。但是使用它酷炫的需要付費(fèi),擴(kuò)展則不需要。 PHP性能被動(dòng)分析工具之xhgui加tideways的安裝實(shí)踐 By:0x584A Date:2016-11-23 17:55:42 前言 最近一直想做個(gè)接口性能分析,但是手打log實(shí)在...
摘要:在環(huán)境中使用,性能分析擴(kuò)展因?yàn)闆](méi)有擴(kuò)展,所以先要自己修改的文件加入擴(kuò)展先在上現(xiàn)在,我下載的是,然后在中新建并配置,,內(nèi)容最后修改文件,我用的是的所有,修改如下注文件夾在中,結(jié)構(gòu)最后在目錄下,重新編譯即可,查看擴(kuò)展第二步下載下 在laradock環(huán)境中使用,xhprof性能分析擴(kuò)展: 因?yàn)閘aradock沒(méi)有xhprof擴(kuò)展,所以先要自己修改php-fpm的Dockerfile文件,加入...
閱讀 3288·2023-04-25 18:03
閱讀 1151·2021-11-15 11:38
閱讀 5560·2021-10-25 09:45
閱讀 847·2021-09-24 09:48
閱讀 2303·2021-09-22 15:34
閱讀 1742·2019-08-30 15:44
閱讀 2684·2019-08-30 13:12
閱讀 609·2019-08-29 16:05