我想知道是否有人可以給出關於如何跟蹤導致減速的功能的高級別答案。追蹤減速的來源
我們有一個擁有6千行代碼的網站,有時會出現明顯的放緩。
我想知道什麼是追蹤這些偶爾減速的來源的最佳方法?我們是否應該在每個功能上附加時間執行跟蹤器,或者您會推薦其他的東西?
這是一個使用PHP 5.2.9(無框架)的標準LAMP堆棧設置。
我想知道是否有人可以給出關於如何跟蹤導致減速的功能的高級別答案。追蹤減速的來源
我們有一個擁有6千行代碼的網站,有時會出現明顯的放緩。
我想知道什麼是追蹤這些偶爾減速的來源的最佳方法?我們是否應該在每個功能上附加時間執行跟蹤器,或者您會推薦其他的東西?
這是一個使用PHP 5.2.9(無框架)的標準LAMP堆棧設置。
正確追蹤腳本放緩的原因和位置的唯一方法是使用a profiler。
有一些PHP可用。其中一些要求您在服務器上安裝模塊,其中一些使用僅限PHP的庫,另一些則是獨立使用的模塊。
我的首選分析器是Zend Studio,主要是因爲我用它作爲我的IDE。它具有獨立的優點,並且可以與服務器端模塊(或Zend Server包)結合使用。允許您在本地和生產系統上進行配置文件。
然而,尋找最簡單的事情之一是SELECT
循環內的查詢。他們因引起緩慢而臭名昭着,特別是當您在查詢表中有超過數百條記錄時。
另外,如果您有多個AJAX調用快速連續,並且您正在使用默認的PHP會話處理程序(平面文件)。這可能會導致加載時間顯着增加,因爲IO操作正在鎖定。這意味着它只能處理一個一次使用會話的請求,儘管AJAX本質上是異步的。
解決這個問題的最好方法是使用/編寫一個使用數據庫存儲會話的自定義會話處理程序。只要確保你沒有飽和數據庫連接限制。
首先,但最重要的是:讓自己成爲一個合適的分析器。 ;)
假設代碼是..好吧,不愚蠢,我傾向於懷疑數據庫瓶頸。確保你使用了一個INNODB數據庫(MyISAM是去年的Sooo!),並確保WHERE子句中使用的列有索引來加速搜索。在附註中,您可以使用像Xenu這樣的功能來抓取您的網站,或許可以指出某些頁面的服務時間要長於正常。 http://home.snafu.de/tilman/xenulink.html –
感謝您的回覆,有沒有辦法將問題隔離到數據庫中的某個瓶頸?我假設大部分時間這是數據庫的問題? –
http://stackoverflow.com/questions/21133/simplest-way-to-profile-a-php-script – cgTag