以前碰到過php-fpmCPU高達80%-90%,特此記錄下php
1. 查看是不是硬件問題html
方式:top 命令linux
主要查看:load average(平均負載),這是一個4核8G內存的服務器bash
1分鐘平均負載:2.32;服務器
5分鐘平均負載:2.18;tcp
15分鐘平均負載:3.95;php-fpm
load average 中3個數的含義,若是是1核cpu,那麼不能超過1,4核那麼就不能超過4,15分鐘能夠表明長期,5分鐘表明中期,1分鐘表明短時間,因此先看15分鐘spa
大神詳解load averagecode
能夠說它如今的平均負載接近了它的cpu總核數:4;須要考慮服務器配置升級!server
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 來查看該進程在處理哪些文件
最後修改對應代碼
記得重啓