很多時候,線上服務器的進程在某時間段內長時間占用CPU過高,為了優化,我們需要找出原因。
1、找出占用CPU最高的10個進程
ps aux | sort -k3nr | head -n 10
或查看占用內存最高的10個進程
ps aux | sort -k4nr | head -n 10
或者使用 top ,按 1 顯示CPU列表,再按 shift+p 以CPU排序
top
2、對進程進行跟蹤查看
查看進程打開的文件
lsof -p 進程PID
查看進程在處理的文件
ll /proc/進程PID/fd
查看進程的內存使用情況
pmap 進程PID
通過strace來跟蹤進程的系統調用
strace -p 進程PID
當然我們也可以查看匯總的信息
strace -cp 進程PID
如果我們想跟蹤某進程所有的系統調用,並統計調用時間,並導出為文件,可用如下命令
strace -o 導出文件 -T -tt -e trace=all -p 進程PID
3、查找php-fpm占用過高的原因
我們可以配置php-fpm的慢日志,查找是哪些文件導致php-fpm占用過高。
先找到php-fpm.conf文件位置
ps -ef|grep php
修改php-fpm.conf,並打開日志選項
;錯誤日志 error_log = log/php-fpm.log ;訪問日志 access.log = log/$pool.access.log ;訪問日志格式 access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%" ;慢日志 slowlog = log/$pool.log.slow ;慢日志超時時間 request_slowlog_timeout = 3
注意:log 目錄需要我們自已創建。
我們可以通過php-fpm的慢日志定位是哪個文件中哪行哪個方法慢,這樣針對性的進行優化。