隔離高 CPU PHP 程序
我有一個 16 CPU 核心伺服器,它的負載平均為 40-70。在
top
執行命令數小時後,我將 CPU 峰值隔離到單個使用者。按下命令後
c
,top
高 CPU 的命令是/usr/bin/php /home/user/public_html/index.php
,這對於隔離基本上沒用,因為它是我們整個 PHP MVC 框架的主要控制器處理程序(如果你好奇的話是 CodeIgniter)。我還沒有玩過程式碼分析器的原因是因為看起來這個使用者下的任何 PHP 程序都具有一貫的高 CPU 使用率。我已經仔細檢查了我們的 slow-query.log (MySQL) 以獲得良好的測量結果,這個 Web 應用程序生成了近 0 個慢查詢。
問題:
- 程式碼分析是這個應用程序的主要答案嗎?
- 為什麼只有一個使用者的傳入 PHP 請求始終很高?
- 為什麼此 Web 應用程序的所有傳入 PHP 請求的 CPU 使用率都很高?
- 過載或效率低下的 MySQL 數據庫是否會導致這些 PHP 程序消耗高於正常的 CPU 使用率?還是兩者完全獨立?
- 是時候升級硬體了?你怎麼知道區別?
過載或效率低下的 MySQL 數據庫是否會導致這些 PHP 程序消耗高於正常的 CPU 使用率?還是兩者完全獨立?
PHP 和 MySQL 是不同的程序,所以當一個緩慢的 MySQL 查詢執行時,並且你正在使用 top,你肯定會看到 MySQL 開始載入 CPU。
為什麼只有一個使用者的傳入 PHP 請求始終很高?
為了嘗試隔離該特定使用者的活動,我將嘗試查看該使用者正在訪問的路由(以及因此在 codeigniter 中觸發的控制器操作)。
您沒有指定作業系統,但假設您的應用程序在 apache+mod_php 上執行,因此您應該看到 GET 和 POST 請求/路由在
/var/log/apache2/access.log.*
or中被訪問/var/log/httpd/access*_log*
。我假設您已經檢查過/var/log/apache2/error.log.*
,/var/log/httpd/error*_log*
否則我也會在這裡檢查。希望這可以提供對該使用者活動的一些見解