十年之前,我們國內(nèi)的網(wǎng)頁設(shè)計師、程序員大部分都使用ASP等語言進行Web編程,但是隨著網(wǎng)絡(luò)環(huán)境的改變以及網(wǎng)站形態(tài)的變化,越來越多的網(wǎng)站陸續(xù)從ASP轉(zhuǎn)向PHP,目前國外的Google、Facebook,國內(nèi)的淘寶、百度等大型網(wǎng)站,都使用了PHP語言進行前端實現(xiàn)。
這樣的趨勢變化,與本身PHP語言的優(yōu)勢有很大的關(guān)系。一來是因為PHP語言具備跨平臺的優(yōu)勢,無論是Linux還是Windows都可以進行兼容。比如我們玩虛擬主機、VPS服務(wù)器的站長都知道,如今Linux服務(wù)器成本更低,也容易找到更多的主機提供商,而且在Linux平臺中PHP項目兼容性更好,且成本更低。二來PHP語法簡單,有成熟的開源軟件和框架支持。眾所周知的WordPress、Zencart、Magento等知名開源軟件都是采用PHP架構(gòu)的,而相對ASP等其他語言雖然有開源軟件,但是基本上是個人興趣愛好開發(fā)的,后續(xù)版本的跟進與維護比較差。
第一、代碼質(zhì)量成為PHP應(yīng)用性能瓶頸
需求的暴漲導(dǎo)致從業(yè)人員的大幅增加,如今國內(nèi)的PHP程序員也越來越多,技術(shù)水平參差不齊,雖然能夠完成某些功能和項目,但由于代碼質(zhì)量不高,項目執(zhí)行效率往往大打折扣。然而很多時候,我們更重視功能的實現(xiàn),而忽視了代碼性能的問題,比如筆者經(jīng)??吹接行┚W(wǎng)友抱怨代碼執(zhí)行效率低是服務(wù)器CPU、內(nèi)存的性能和穩(wěn)定性問題,殊不知其實是PHP執(zhí)行效率出現(xiàn)問題導(dǎo)致的。
A – 開發(fā)者能力差異和技術(shù)不嚴謹
在國內(nèi),我們大部分從業(yè)開發(fā)者并不是科班出身,可能是后期自學(xué)或者根據(jù)公司項目的需要然后逐漸形成的具有個人和公司特點的書寫代碼習(xí)慣,使然基本的功能能夠?qū)崿F(xiàn),但是代碼規(guī)范化、優(yōu)化性能并不是很好,這就需要我們用到監(jiān)控工具檢測項目不足之處。
B – 項目外包轉(zhuǎn)接
我們很多公司的項目初期或者過程中都是外包團隊或者其他同事完成的,在我們經(jīng)手后會看到各種的不習(xí)慣的書寫方式,這個時候我們就需要快速的調(diào)整和完善相互的兼容問題,可以用到監(jiān)控工具實現(xiàn)。
C – 歷史版本問題
與上面一點有些類似,因為項目的不斷推進和調(diào)整,可能會出現(xiàn)歷史版本的重疊,PHP功能實現(xiàn)效率執(zhí)行度不高。
經(jīng)常看到有人認為的”PHP是解釋型語言”其實是不嚴謹?shù)?,PHP不是不編譯,而是每次執(zhí)行都編譯,除此之外最嚴重的問題即是較難實現(xiàn)并行運算(注意只說”較難”,使用PHP進行并行計算的方案不止一個)?;贠p Code的存在,已經(jīng)誕生了大量cache工具擴展,可以有效提升PHP應(yīng)用的執(zhí)行性能,如OpCache,Apc,Apcu,Xcache等等。
對于使用PHP開發(fā)的網(wǎng)站、接口、應(yīng)用系統(tǒng)而言,性能的瓶頸點會在什么地方呢? 做過PHP應(yīng)用性能優(yōu)化的朋友們都知道,遞歸、循環(huán)、資源操作、資源釋放等都是常見的瓶頸點,這些經(jīng)常會造成阻塞或鎖。
可以得出CPU 、內(nèi)存 、各種I/O、各種網(wǎng)絡(luò)帶寬等的消耗是性能瓶頸點中的重中之重,我們可以簡單歸結(jié)為:外部服務(wù)(如第三方API),資源讀寫,代碼異常。
處理這些問題的通用作法是使用Xhprof,Xdebug或PHP-trace等工具來找出,并配合架構(gòu)師或高級工程師經(jīng)驗來處理,方法包括單例、事務(wù)、按需加載、短事務(wù)、及時釋放等等(對于大多數(shù)公司與開發(fā)人員來講,碰到性能問題更多的作法是盲目的猜測與撓頭),但這些方法有哪些不足呢?
一眼可知,只能在測試或生產(chǎn)環(huán)境,產(chǎn)生問題并明確之后進行處理.測試環(huán)境還好,但如果是生產(chǎn)環(huán)境,事后處理雖能補救,但大多數(shù)面對的都是因功能受損造成的投訴或更嚴重的業(yè)務(wù)損失。
能夠在生產(chǎn)環(huán)境第一時間發(fā)現(xiàn)或規(guī)避可能的性能問題;準確記錄已知或未知故障現(xiàn)場。這兩點,則成為應(yīng)用性能管理的迫切需求。
傳統(tǒng)的方法往往要耗費很多時間,而且對技術(shù)要求非常高,水平一般的程序員往往很難獨自搞定。所以筆者建議大家試試透視寶這款產(chǎn)品,與我們熟悉的監(jiān)控寶一樣來自云智慧,這是一款應(yīng)用性能管理軟件,可以對應(yīng)用底層的代碼執(zhí)行效率進行全面的監(jiān)控,幫助程序員快速發(fā)現(xiàn)影響應(yīng)用執(zhí)行速度的性能瓶頸,輕松實現(xiàn)代碼的調(diào)整和優(yōu)化。
第二、透視寶PHP監(jiān)控原理與優(yōu)勢
云智慧透視寶通過對PHP代碼執(zhí)行的深入研究實現(xiàn),在不影響應(yīng)用系統(tǒng)原有代碼執(zhí)行性能的情況下,實現(xiàn)PHP代碼性能監(jiān)控最簡單有效的方式是通過PHP擴展,而云智慧透視寶的PHPAgent正是利用了以下幾個Hook:
A - zend_compile_file & zend_compile_string
加載分析文件或字符串,本身就會造成非常大的IO,如果過多地執(zhí)行加載,無疑會造成內(nèi)存和CPU的消耗.通過這兩個hook,可以取得文件名、執(zhí)行行數(shù)、使用內(nèi)存和CPU占用時間。
B - zend_execute & zend_execute_internal
通過這兩個hook的使用,我們可以準確地分析得出一個PHP應(yīng)用中的類調(diào)用、方法調(diào)用、方法參數(shù)、內(nèi)存占用和CPU占用,加以分析,便可以準確得出應(yīng)用系統(tǒng)運行過程中的方法運行棧,API調(diào)用地址,SQL語句,Cache Key以及Cache命中等關(guān)鍵信息。
C - zend_throw_exception_hook
利用異常鉤子,可以準確地得到應(yīng)用系統(tǒng)運行過程中出現(xiàn)的異常信息,當(dāng)然包括異常發(fā)生的類方法位置,參數(shù),異常code和異常message。
D - zend_error_cb
錯誤鉤子則更加直接,可以準確得到系統(tǒng)運行過程中出現(xiàn)的任何一個warning,代碼錯誤或語法錯誤。
PHPAgent注冊與應(yīng)用Hook流程(上圖)
zend_execute hook的應(yīng)用示意(偽代碼)
上圖大致解釋了PHPAgent是如何運用zend_execute hook進行數(shù)據(jù)采集的: 先取得方法名,同時通過規(guī)則過濾引擎,判斷哪些是需要關(guān)注或不關(guān)注的(類方法的黑白名單),然后通過AGENT_BEGIN宏記錄方法開始時間,方法名,行數(shù),內(nèi)存起點與參數(shù),在執(zhí)行原有zend_execute之后,再通過AGENT_END宏記錄結(jié)束時間,內(nèi)存止點。
通過上述Hook的應(yīng)用,已經(jīng)可以得到我們所關(guān)注的PHP代碼執(zhí)行性能指標數(shù)據(jù):類方法執(zhí)行順序,執(zhí)行時間,內(nèi)存占用,接口DB等資源連接,SQL語句和執(zhí)行時間等。
經(jīng)過嚴格的壓力測試和生產(chǎn)環(huán)境部署實踐,PHPAgent對原有應(yīng)用系統(tǒng)的性能影響在5%以內(nèi)。經(jīng)過一些參數(shù)調(diào)配,可以將性能影響降到更低,這些參數(shù)包括:是否啟動異常鉤子、是否啟動錯誤鉤子、是否啟用數(shù)據(jù)采樣、是否啟用棧追蹤、是否使用黑白名單(URLHeaderCookieRequest Params)、是否啟用UDP發(fā)送代理、關(guān)注請求時間響應(yīng)閾值、關(guān)注方法時間響應(yīng)閾值。
對于我這樣沒有太多經(jīng)驗的PHP開發(fā)者來說,透視寶具備面向多平臺和多語言的應(yīng)用監(jiān)控與代碼診斷,比如我們常用的PHP語言項目,可以幫助我們快速的開發(fā)、部署和維護應(yīng)用,可以幫助我們檢測應(yīng)用存在的性能風(fēng)險以及執(zhí)行效率低的代碼和SQL執(zhí)行語句,此外,還可以幫助我們提升代碼的書寫習(xí)慣和編程水平。
第三、透視寶PHP監(jiān)控性能的實現(xiàn)與部署
普通的站長和開發(fā)者在使用PHP開源軟件和框架的時候,也可以使用透視寶進行應(yīng)用的性能的檢測,以便于我們優(yōu)化應(yīng)用的執(zhí)行效率。要知道,很多時候服務(wù)器性能的變化,并不一定是服務(wù)器的穩(wěn)定性問題,而是應(yīng)用程序的執(zhí)行效率問題。
透視寶的使用非常簡單,而且目前是免費注冊和使用的,接下來我們通過具體的注冊和部署過程,來體驗一下透視寶這款A(yù)PM產(chǎn)品的實際應(yīng)用。
網(wǎng)站標題:透視寶助力PHP應(yīng)用性能監(jiān)控與問題診斷
當(dāng)前網(wǎng)址:http://jinyejixie.com/article36/cjoopg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、建站公司、全網(wǎng)營銷推廣、網(wǎng)站設(shè)計、外貿(mào)建站、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)