關於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分鍾

  大神詳解load average

  可以說它現在的平均負載接近了它的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   來查看該進程在處理哪些文件

  最后修改對應代碼

記得重啟


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM