當(dāng)前位置:首頁(yè) > 新聞中心 > 互聯(lián)網(wǎng)動(dòng)態(tài)
巧用工具進(jìn)行php性能分析責(zé)任編輯 :李飛    文章來(lái)源 :星翼創(chuàng)想(briannamclaughlin.com)    發(fā)布時(shí)間 :2015-09-21    閱讀次數(shù):4210


性能分析是衡量應(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)。

用于基準(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 + Xhgui

Xhprof 由 Facebook 開(kāi)發(fā)的,包含一個(gè)基本的用戶界面用于查看性能數(shù)據(jù)。此外,Paul Reinheimer 開(kāi)發(fā)了 Xhgui 和一個(gè)增強(qiáng)的用戶界面(UI)用于查看、比較和分析性能數(shù)據(jù)。

安裝

安裝 XHPROF
Xhprof 可通過(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 上找到,地址為
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ù)呐渲谩?/span>

為提高 MongoDB 的性能,你可以運(yùn)行以下指令以添加索引:
$ mongo > use xhprof
db.results.ensureIndex( {'meta.SERVER.REQUEST_TIME': -1} ) db.results.ensureIndex( {'profile.main().wt': -1} ) db.results.ensureIndex( {'profile.main().mu': -1} ) db.results.ensureIndex( {'profile.main().cpu': -1} ) db.results.ensureIndex( {'meta.url':1} )


深圳市星翼創(chuàng)想網(wǎng)絡(luò)科技有限公司,給你專業(yè)的網(wǎng)站建設(shè)新體驗(yàn)!


文章轉(zhuǎn)載請(qǐng)保留網(wǎng)址:http://briannamclaughlin.com/news/industry/1486.html

掃碼添加微信
159 8667 8737
24小時(shí)電話

返回頂部