不少時候,線上服務器的進程在某時間段內長時間佔用CPU太高,爲了優化,咱們須要找出緣由。php
一、找出佔用CPU最高的10個進程服務器
ps aux | sort -k3nr | head -n 10
或查看佔用內存最高的10個進程php-fpm
ps aux | sort -k4nr | head -n 10
或者使用 top ,按 1 顯示CPU列表,再按 shift+p 以CPU排序優化
top
二、對進程進行跟蹤查看日誌
查看進程打開的文件code
lsof -p 進程PID
查看進程在處理的文件orm
ll /proc/進程PID/fd
查看進程的內存使用狀況blog
pmap 進程PID
經過strace來跟蹤進程的系統調用排序
strace -p 進程PID
固然咱們也能夠查看彙總的信息進程
strace -cp 進程PID
若是咱們想跟蹤某進程全部的系統調用,並統計調用時間,並導出爲文件,可用以下命令
strace -o 導出文件 -T -tt -e trace=all -p 進程PID
三、查找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的慢日誌定位是哪一個文件中哪行哪一個方法慢,這樣針對性的進行優化。