如果 top 命令看到 CPU 飙高,别慌,按下面步骤来,快速定位异常进程,安全解决。
先查 CPU 占用前10的进程,直接复制这条命令,不用改,执行就完了:ps -ef | sort -k 3 -r | head -10别光复制不明白:ps -ef 是查看所有进程,sort -k 3 -r 是按CPU使用率倒序排列,head -10 是只显示前10个。重点看 COMMAND 列(进程名称)和 %CPU 列,陌生进程、占用率特别高的,重点怀疑。

定位到异常进程后,先别急着杀,先看看它在做什么,避免杀错,命令直接复制,把“进程ID(PID)”换成你查到的数字就行:ps -aux | grep 进程ID(PID)比如 PID 是1720,就输 ps -aux | grep 1720,能看到进程的具体操作、占用的资源,判断它是不是无用进程、异常进程。

临时解决(紧急情况用):如果确定是无用进程、异常进程(比如陌生脚本、死循环程序),直接杀死,命令记好:kill -9 进程ID(PID)
重点提醒!核心进程(比如 nginx、mysql、sshd、systemd)别乱杀,杀错sshd,你就远程登不上服务器了;杀错mysql,业务直接停摆。不确定就先查清楚进程用途,评论区问我也可以,别瞎操作。
一个个我踩过的坑:有一次CPU飙满,我没看清楚,把nginx进程杀了,导致业务停摆。后来我就养成习惯,杀进程前,必用ps -aux查清楚用途,再动手。
另外,很多时候 CPU 飙高,不是恶意进程,就是定时任务叠加,比如备份任务和数据同步任务同时执行,这时候不用杀进程,先停止其中一个,等完成后再执行另一个,卡顿就缓解了。
第三步:排查内存异常
如果 top 看到内存快满了,available 特别低,别着急加内存,先排查——很多时候是缓存太多,或者某个进程异常占用,清理一下就好,省成本又省事。
先查看内存详细使用情况,直接复制命令,执行后一目了然:
free -h重点看 available(可用内存),如果 available 低于10%,就是内存不足,需要清理;如果 used 很高,但 available 也不低,说明是缓存占用,不用慌,清理缓存就行。

查看内存占用前10的进程,和CPU排查类似,命令改个参数就行,直接复制:
ps -ef | sort -k 4 -r | head -10解释一下:sort -k 4 是按内存使用率倒序,找到占用内存最高的进程,重点排查是不是程序内存泄漏(比如Java程序,内存一直涨,不释放)。

内存清理(安全不删核心数据,放心用):如果是缓存占用,执行这条命令,清理后可用内存会明显增加:
sync && echo 3 > /proc/sys/vm/drop_caches跟大家说清楚,这条命令清理的是系统缓存,不会删除业务数据、日志,安全可用,我每天都会执行一次,避免缓存堆积。
第四步:排查磁盘 I/O 异常
我遇到过好几次,CPU、内存都正常,但服务器就是卡顿,远程登录都卡,最后排查下来,全是磁盘 I/O 过高惹的祸——磁盘读写太频繁,拖慢了整个系统,这种情况最容易被忽略!
先查看磁盘 I/O 占用情况,直接复制命令,执行后就能看到:
iostat -x 1 3重点看两个地方:%util 列(磁盘使用率),超过80%就是 I/O 异常,数值越高,磁盘压力越大;tps 列(每秒读写次数),数值过高,说明磁盘读写太频繁。补充一句:如果没找到iostat命令,说明系统没装sysstat工具,执行 yum install sysstat -y(CentOS)或apt install sysstat -y(Ubuntu),装完就能用,很简单。


查看具体哪个磁盘、哪个进程占用 I/O 过高,用这条命令,直观又方便:iotop操作技巧:按“o”,只显示有 I/O 活动的进程;按“P”,按进程 I/O 使用率排序,快速找到“罪魁祸首”,比如某个日志进程、文件传输进程。
临时解决:停止异常读写进程(比如大量日志写入、文件传输),或者清理无用大文件(比如/var/log目录下的旧日志、临时文件),缓解磁盘压力。
实用小技巧:平时一定要定期清理日志,我一般每周清理一次/var/log目录下的旧日志,用 rm -rf /var/log/*.log(谨慎操作,别删错),或者用日志轮转工具,避免日志占满磁盘,导致 I/O 过高。另外,尽量别在服务器上存大文件、做大量文件传输,容易拖慢磁盘。
第五步:排查网络异常
如果前面3步都正常,CPU、内存、磁盘都没问题,但接口还是超时、卡顿,就排查网络,大概率是端口占用、带宽跑满,或者网络不通。
查看端口占用情况,这条命令平时用得最多,直接复制,能看到所有监听端口:
netstat -ntlp重点看:LISTEN 状态的端口,有没有异常端口占用(比如陌生端口、非业务端口),或者业务端口被多个进程占用(比如80端口,被两个nginx进程占用),这种情况会导致接口超时。补充:如果没找到netstat命令,执行 yum install net-tools -y 或 apt install net-tools -y,装完就能用。

查看网络带宽使用情况,用这条命令,能看到每个IP的带宽占用:iftop重点看:有没有异常IP占用大量带宽(比如恶意攻击IP、陌生IP),如果有,直接拉黑IP,或者联系服务商限制带宽。
临时解决:关闭异常端口、杀死占用带宽的进程,或者联系服务商调整带宽;如果是网络不通,用 ping、traceroute 命令,排查网络链路问题。