php-fpm进程占用CPU过高
php-fpm进程占用CPU过高
定位
- 定位逻辑问题
- 配置优化
分析
- 查看cpu , 内存占用, 查看负载状态
- 检查IO使用占比
- 查看打开的文件
- 查看相关的进程数量
- 查看该进程打开的文件
- 查看该进程的进程状态
- 转入该进程相关服务的配置文件, 查看日志路径
- 查看最近相关的程序日志
方案
cat /proc/cpuinfo | grep "physical id" | sort | uniq|wc -l # 1 核心数
top
# 打印 load average: 0.05, 0.12, 0.13, 分别表示0分钟 , 5分钟, 15分钟占用核心为5%, 12%, 13% ; 代表短期, 中期, 长期的监控情况
如果load average接近 核心数 , 说明负载高
top -o %MEM
top -o %CPU
iostat -x 1 # 检查%util字段 (每秒IO利用率)
ps aux | grep program_name
ll /proc/PID/fd
strace -p PID -o /tmp/output.txt -T -tt -F -e trace=all
ps aux|grep php | grep master
vim /www/server/php/80/etc/php-fpm.conf
设置request_slowlog_timeout(秒)
设置slowlog 路径
获取php-fpm.pid路径
保存修改
重启: kill -USR2 `cat /www/server/php/80/var/run/php-fpm.pid`
检查pid变更: ps aux|grep php | grep master
等待cpu占用上升:
tail -n 100 var/log/slow.log
strace 命令
strace -p PID -o /tmp/output.txt -T -tt -F -e trace=all
-p 指定pid
-o 导出到文件
-T 每个调用的耗时
-tt 打印时间戳
-e trace=all 过滤输出内容
-e trace=file 跟踪和文件访问相关的调用(参数中有文件名)
-e trace=process 和进程管理相关的调用,比如fork/exec/exit_group
-e trace=network 和网络通信相关的调用,比如socket/sendto/connect
-e trace=signal 信号发送和处理相关,比如kill/sigaction
-e trace=desc 和文件描述符相关,比如write/read/select/epoll等
-e trace=ipc 进程见同学相关,比如shmget等
-e trace=clone ???
Linux /proc/$pid
ll /proc/PID/cwd 查看工作目录
cat /proc/4719/environ 查看环境变量
ll /proc/4719/exe 查看运行程序
ll /proc/4719/fd 查看打开的文件
cat /proc/4719/limits 查看系统对当前进程的资源限制
cat /proc/4719/status 查看进程状态
其他参数说明 : https://www.cnblogs.com/likui360/p/6181927.html
反向代理
- 保护服务器ip, 对外仅暴露反向代理服务器的ip
- 实现负载均衡, 可用缓存加速
正向代理:
保护用户ip, 对服务器仅暴露代理服务器的ip
应用 : 跳板机

浙公网安备 33010602011771号