生產環境:運行Apache 2.2的工作站羣集前的負載平衡器/ HTTP反向代理,mod_php
5.3在64位Linux上。所有的工作機器都運行完全自定義的PHP代碼,並與單個後端PostgreSQL數據庫對話。 PHP代碼經過優化,可以將CPU花在與數據庫交談上。數據庫機器已被驗證仍有大量空閒。PHP:如何在生產中運行採樣分析器?
我正在尋找:採樣分析器,它可以通過PID附加到PHP程序和定期停止過程(與SIGSTOP
EG),通過內存檢查收集PHP棧和持續的過程(例如使用SIGCONT
) 。停止時間應該可以調整,但我認爲停止時間應該在1-10毫秒左右。
單個工作機器PHP進程有望在小於100毫秒內運行單個請求。我最感興趣的是收集超過100毫秒的進程的配置文件數據。最好的情況將是一個採樣分析器,它將在請求開始時得到通知,並且處理請求的PHP進程在100 ms後仍然運行,以1 ms爲間隔開始採樣。通過這種方式,任何正常運行的進程都可以在沒有中斷的情況下運行到最後,並且仍然可以獲取有問題的配置文件。
這種PHP採樣分析器是否存在?意圖是不使用instrumenting分析器,因爲開銷太高,儀器混淆了統計信息(在那裏,這樣做)。
我已經意識到了XHProf和Xdebug,但據我所知,這兩者都是探測分析器並影響PHP程序的實際操作碼。我非常喜歡運行普通PHP操作碼的東西。
我所知道的最接近的工作是用HipHop運行PHP代碼,並使用C/C++代碼採樣分析器,但我還沒有準備好將軟件移植到HipHop。在這種情況下,分析結果將僅代表HipHop,而不代表mod_php。
請注意:可以將http://inventorsparadox.blogspot.fi/2012/02/how-to-dump-php-stack-from-gdb.html和http://poormansprofiler.org /爲此創建工具... –
似乎XHprof支持採樣但文檔非常差,並且採樣率固定爲100毫秒,這有點粗糙:http://php.net/manual/en/function。 xhprof-sample-disable.php –
你有沒有找到一個體面的解決方案呢?我發現自己也有類似的需求(巧合的說,與您所描述的設置幾乎完全相同) – Basic