查找linux下進程占用CPU過高的原因,以php-fpm為例


很多時候,線上服務器的進程在某時間段內長時間占用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的慢日志定位是哪個文件中哪行哪個方法慢,這樣針對性的進行優化。


免責聲明!

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



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