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