ps命令如何查看CPU异常进程?
在Linux云服务器运行过程中,CPU异常占用是比较常见的问题。网站访问量突然增加、PHP程序执行异常、数据库查询压力过高、恶意脚本运行、定时任务异常等情况,都可能导致服务器CPU持续升高。
很多管理员发现CPU达到100%以后,第一时间会选择重启服务器,但重启只能暂时释放资源,并不能真正找到问题来源。如果没有定位具体占用CPU的进程,服务器可能很快再次出现高负载。
在Linux系统中,ps命令是排查CPU异常进程的重要工具之一。通过合理使用ps命令,可以快速查看哪些程序正在消耗CPU资源,进一步判断是正常业务压力还是异常程序导致的问题。
一、为什么需要使用ps命令排查CPU异常进程
Linux服务器中运行着大量后台服务,例如Nginx、PHP-FPM、MySQL、Redis、定时任务以及各种系统进程。
当CPU出现异常时,仅仅通过服务器面板查看CPU百分比,只能知道资源紧张,却无法准确判断:
哪个进程占用CPU。
哪个用户启动了该进程。
进程对应哪个程序。
进程运行时间是否异常。
是否存在多个相同异常进程。
例如:
一台运行PHP网站的云服务器,平时CPU使用率保持在30%左右,突然升高到95%以上。
管理员查看宝塔监控后发现CPU异常,但是无法确定原因。
通过ps命令查看后发现,大量php-fpm进程持续占用CPU,其中部分进程运行时间超过几个小时。
进一步分析PHP访问日志后发现,有大量异常请求集中访问某个动态页面。
最终通过限制异常访问并优化程序代码解决问题。
因此,CPU异常排查的关键不是降低CPU,而是找到消耗CPU的具体进程。
二、使用ps查看当前CPU占用进程
Linux系统中,最常用的查看CPU进程命令:
ps aux
执行后,可以看到服务器当前所有运行进程。
输出内容通常包含:
USER:进程所属用户。
PID:进程编号。
%CPU:CPU占用比例。
%MEM:内存占用比例。
VSZ:虚拟内存使用量。
RSS:实际占用物理内存。
STAT:进程状态。
START:启动时间。
TIME:累计占用CPU时间。
COMMAND:执行命令。
其中最重要的是:
%CPU
PID
COMMAND
例如:
root 3256 85.5 2.1 php-fpm
表示PID为3256的PHP-FPM进程,占用了85.5%的CPU。
此时就需要继续分析该PHP进程为什么持续消耗资源。
三、按照CPU使用率排序查看异常进程
服务器进程较多时,直接查看ps aux会产生大量信息,不方便定位。
可以结合sort命令进行排序:
ps aux --sort=-%cpu
该命令会按照CPU占用率从高到低排列。
排在前面的就是当前消耗CPU最多的进程。
例如:
root 1258 98.2 php-fpm mysql 2356 75.4 mysqld www 4521 60.1 nginx
通过排序后,可以快速发现:
PHP程序是否异常。
MySQL是否压力过大。
是否存在未知程序占用资源。
对于CPU突然满载的服务器,这个命令通常可以快速找到第一批重点排查对象。
四、结合PID进一步分析异常进程
找到CPU异常进程后,需要根据PID进一步确认详细信息。
例如:
ps -ef | grep PID
假设发现:
PID 3256
执行:
ps -ef | grep 3256
可以查看该进程启动命令。
例如:
正常PHP进程:
php-fpm: pool www
说明属于PHP网站程序。
异常情况:
/usr/bin/.hidden/script.sh
或者:
/tmp/update
这种隐藏目录运行的程序,就需要重点检查。
很多服务器被植入恶意脚本后,会通过隐藏文件名伪装系统进程,持续消耗CPU资源。
五、查看PHP-FPM异常CPU进程
对于PHP网站服务器,PHP-FPM是最容易造成CPU异常的服务之一。
执行:
ps aux | grep php-fpm
可以查看所有PHP进程。
例如:
www 8567 95.0 php-fpm: pool www www 8568 92.5 php-fpm: pool www
如果大量PHP-FPM进程CPU持续升高,通常可能存在:
网站访问量突然增加。
某个PHP页面执行时间过长。
程序存在死循环。
采集程序请求过多。
恶意扫描动态页面。
解决方法:
首先查看Nginx访问日志:
tail -f /www/wwwlogs/access.log
观察是否存在大量重复请求。
其次检查PHP慢日志:
slowlog
找到执行时间过长的PHP脚本。
最后优化:
限制异常请求。
优化代码逻辑。
增加缓存。
调整PHP-FPM参数。
例如:
某蜘蛛池服务器CPU长期100%,通过ps发现大量PHP-FPM进程占用CPU。
继续查看访问日志发现,大量非搜索引擎IP访问动态PHP入口。
限制异常访问后,PHP进程数量明显下降,CPU恢复正常。
六、查看MySQL进程CPU占用
除了PHP,MySQL也是常见CPU异常来源。
执行:
ps aux | grep mysql
如果发现:
mysql 2458 90.0 mysqld
说明数据库正在大量消耗CPU。
常见原因:
SQL查询效率低。
缺少索引。
慢查询过多。
数据库连接数量过高。
程序频繁读取数据。
进一步可以查看MySQL运行状态:
show processlist;
查看当前执行中的SQL。
如果发现大量相同查询长期运行,需要优化对应程序。
例如:
一个内容网站访问量增加后CPU升高。
通过ps发现mysqld占用超过80%。
分析数据库后发现文章搜索功能没有索引,每次查询都会扫描大量数据。
增加索引并优化查询后,数据库CPU恢复正常。
七、使用ps查看进程启动时间判断异常
有些异常进程并不会立即占满CPU,而是长期缓慢消耗资源。
可以使用:
ps -eo pid,ppid,cmd,%mem,%cpu,lstart --sort=-%cpu
查看:
PID。
父进程。
启动时间。
CPU占用。
内存占用。
如果发现某个陌生程序运行时间很长,并且持续占用CPU,需要进一步检查。
例如:
一个服务器凌晨CPU异常升高。
通过查看进程启动时间发现,异常程序每天凌晨固定启动。
进一步检查发现,是某个异常定时任务执行脚本导致。
删除异常任务后恢复正常。
八、结合top命令动态观察CPU变化
虽然ps命令适合查看进程信息,但是它属于一次性查看。
如果需要实时观察,可以结合:
top
或者:
top -c
其中:
top -c
可以显示完整进程命令。
这样可以看到程序具体执行路径。
例如:
普通:
php-fpm
详细:
php-fpm: pool www /www/wwwroot/example.com/index.php
排查网站CPU问题时,更容易定位具体业务。
九、发现异常CPU进程后的处理方式
找到CPU异常进程后,不建议立即强制结束。
应该按照以下流程处理:
第一,确认进程是否属于正常业务。
例如:
PHP-FPM高CPU可能是访问量增加,也可能是程序异常。
MySQL高CPU可能是正常查询,也可能是慢SQL。
第二,分析产生原因。
查看日志。
查看访问记录。
检查代码。
检查计划任务。
第三,采取针对性优化。
如果是恶意程序:
结束进程。
删除恶意文件。
检查安全漏洞。
如果是网站访问压力:
优化程序。
增加缓存。
调整PHP-FPM。
如果是数据库问题:
优化SQL。
增加索引。
调整数据库配置。
只有找到根本原因,才能避免CPU再次异常。
总结
ps命令是Linux服务器CPU异常排查中非常实用的工具,通过查看进程列表、CPU排序、PID分析以及程序路径,可以快速定位服务器资源消耗来源。
在实际运维过程中,CPU升高并不可怕,关键是找到导致资源异常的具体进程。无论是PHP-FPM占用过高、MySQL查询压力、异常脚本运行,还是恶意访问造成负载增加,都可以通过ps命令结合日志分析进行精准定位。
掌握正确的排查流程,可以减少服务器故障恢复时间,提高网站运行稳定性,让云服务器长期保持良好的性能状态。
纵横云服务器租赁,欢迎随时联系,客服联系方式:QQ3494196421,手机微信19906048601。


