如何判斷哪個頁面正在創建高 CPU 負載的 httpd 程序?
我有一個執行自定義 Wordpress+bbPress 組合的 LAMP 伺服器(基於 CentOS 的 MediaTemple (DV) Extreme,具有 2GB RAM)。
每天大約有 30k 的頁面瀏覽量,伺服器開始呻吟。今天早些時候,當交通擁堵時,它跌跌撞撞了大約 5 分鐘。即使在正常情況下,我也可以看到虛擬伺服器有時處於 90% 以上的 CPU 負載。使用 Top 我經常可以看到 5-7 個 httpd 程序,每個程序使用 15-30%(有時甚至是 50%)的 CPU。
在我們進行大優化之前(我們對 MySQL 的使用可能是罪魁禍首),我很想找到主要違規的頁面並首先處理它們。**有沒有辦法可以找出哪些特定請求負責最佔用 CPU 的 httpd 程序?**我發現了很多關於一般優化的資訊,但沒有關於這個特定問題的資訊。
其次,我知道有一百萬個變數,但是如果您對我們是否應該在具有這種規模的站點的單個專用虛擬伺服器上處於性能邊界有任何見解,那麼我很想听聽您的意見。我們應該考慮遷移到更強大的伺服器,還是應該專注於目前伺服器的優化?
strace
是開始調試此類問題的好方法。嘗試 strace 消耗更多 CPU 的 Apache 程序之一的 pid:strace -f -t -o strace.output -p PID
這將顯示在該程序中進行的系統呼叫。查看 strace.output 並查看該過程在做什麼。這可能會啟發您的方式並向您展示該過程在哪裡掛起。“-t”標誌在這裡非常重要,因為它將在 strace 輸出的每一行前面加上一天中的時間。所以,尋找飛躍。
另一方面,您認為 MySQL 可能是罪魁禍首,我會啟用慢查詢日誌,查看它並嘗試優化該查詢。更多關於慢查詢日誌的資訊在這裡。
另外,不要忘記查看您的網路伺服器的日誌文件。
關於您的第二個問題,我認為僅憑此資訊很難判斷。如果您有預算,將前端(網路伺服器)與後端(數據庫)分離始終是一個好習慣。另一方面,我認為在添加更多硬體之前,應該專注於嘗試使用目前硬體優化性能。否則,問題可能只是被推遲了。
希望這可以幫助。