由于可能涉及到私密信息,这里就不放图了。
具体现象有:
- CPU占用高:使用
top
命令观察到CPU用户态占用特别高,长时间70%以上。 - php-fpm进程多:使用
top
命令观察到php-fpm进程特别多。使用wc
统计到有160+个进程。 - 等待线程多:使用
top
命令观察到等待进程高达8+。
处理思路:
- 降低php-fpm进程数:通过调整
php-fpm.conf
配置文件中pm.max_children
字段,重启php-fpm
并未见明显降低CPU占用率。 - 添加
access
日志:在php-fpm.conf
配置文件添加中access.log = /XXX/access.$pool.log
、access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
,观察日志,发现有一个接口访问量特别大,并且状态是404。预计就是这里出了问题。
处理结果:
在nginx上将这个api接口丢弃掉(经过讨论,该接口已经处于废弃状态),发现CPU占用恢复正常。
总结:
php-fpm
貌似使用cgi
技术,fork
时会比较消耗资源,后来在nginx
上丢弃效率就要高得多
网友评论