1. 程式人生 > >關於PHP的 PHP-FPM程序CPU 100%的一些原因分析和解決方案

關於PHP的 PHP-FPM程序CPU 100%的一些原因分析和解決方案

之前碰到過php-fpmCPU高達80%-90%,特此記錄下

1. 檢視是否是硬體問題

  方式:top  命令

  主要檢視:load average(平均負載),這是一個4核8G記憶體的伺服器

  1分鐘平均負載:2.32;

  5分鐘平均負載:2.18;

  15分鐘平均負載:3.95;

  load average  中3個數的含義,如果是1核cpu,那麼不能超過1,4核那麼就不能超過4,15分鐘可以代表長期,5分鐘代表中期,1分鐘代表短期,所以先看15分鐘

  可以說它現在的平均負載接近了它的cpu總核數:4;需要考慮伺服器配置升級!

2.檢視是否是PHP-fpm的程序數過多

  首先使用 free -m

 指令檢視當前伺服器執行狀況:

  

  可以看到我的記憶體消耗不多,也能看到我是2G記憶體

  然後再用  top  命令 m 引數  檢視記憶體情況

  再使用:ps auxw|head -1;ps auxw|sort -rn -k4|head -40      檢視消耗記憶體最多的前40個程序

  檢視通過命令檢視伺服器上一共開了多少的 php-cgi 程序:ps -fe |grep "php-fpm"|grep "pool"|wc -l

  檢視已經有多少個php-cgi程序用來處理tcp請求:netstat -anp|grep "php-fpm"|grep "tcp"|grep "pool"

|wc -l

設定PHP-FPM的程序數:vi /etc/php-fpm.d/www.conf(根據實際情況變化)找到 pm.max_children 欄位,設定一個合理的值,比之前的小

  pm.max_spare_servers : 該值表示保證空閒程序數最大值,如果空閒程序大於此值,此進行清理 pm.min_spare_servers : 保證空閒程序數最小值,如果空閒程序小於此值,則建立新的子程序;

  這兩個值均不能不能大於 pm.max_children 值,通常設定 pm.max_spare_servers 值為 pm.max_children 值的60%-80%。

  正常情況下,一個php--fpm佔用記憶體20~30M

3.程序跟蹤

1.使用  top   找出CPU最高的程序pid

   2.strace -p PID(程序數)   來跟蹤程序

  3. ll /proc/PID/fd   來檢視該程序在處理哪些檔案

  最後修改對應程式碼

記得重啟