家用住宅主机Linux进程100%CPU占用排查命令
当家里那台装了Linux的小主机突然变得很慢,风扇狂转,多半是有某个进程把CPU吃满了。
别慌,本文教你在不装额外软件的情况下,用自带命令迅速找到“罪魁祸首”。
排查前先确认你已准备好这三样东西
- SSH连接工具:Windows用PuTTY或PowerShell,macOS/Linux直接用终端。确保你能远程登录那台主机。
- 用户名和密码:至少要有sudo权限的用户,杀进程时可能需要提权。
- 主机IP地址:记下你主机的局域网IP(例如192.168.1.100)。
如果你还没开启SSH服务,先执行 sudo systemctl start ssh 和 sudo systemctl enable ssh 确保下次开机也能连。
两条核心命令找出吃掉CPU的进程
1. top:实时总览+一键排序
登录后输入 top,你会看到一个不断刷新的列表。
重点看 %CPU 列,数字最大的那个就是当前最吃CPU的进程。
按 P 键(大写P)可让进程按CPU占用从高到低排序,方便一眼看到头号元凶。
记录下进程的 PID(第一列数字)。
如果列表太长,按 q 退出。
如果某个进程CPU一直居高不下,继续下一步。
2. ps:抓取瞬间快照+定位完整命令名
top退出后,用 ps aux --sort=-%cpu | head -20 直接打印CPU占用最高的前20个进程。
输出中包含 USER、PID、%CPU、%MEM、COMMAND(完整命令名),对比top看到的信息,确认是哪个程序。
举个例子:看到一个 python3 进程CPU占98%,而你并没有运行Python任务,很可能中了挖矿病毒或脚本异常。
3. (可选)htop:更直观的升级版
如果系统没装,用 sudo apt install htop 安装。
htop支持鼠标点击排序、树形显示进程父子关系,对新手更友好。
但本文所有操作都用top + ps完成,不依赖htop也可。
遇到这些情况千万别急着杀进程
- 未知名称的进程:比如
kworker、rcu_sched、jbd2这类内核线程,强行杀掉可能导致死机。建议先记录规律:CPU是持续100%还是间歇性飙升。 - 系统服务进程:如
systemd-journald、sshd、cron,杀错会导致对应功能失效。可以先用systemctl status <服务名>查看状态,再决定是否重启服务。 - 正常的编译或更新任务:如果你刚运行了
apt upgrade或make,CPU占用高是正常的,等它完成后自动回落。
正确的杀进程姿势:确认进程名和PID后,执行 kill 发送终止信号。
如果杀不掉,用 sudo kill -9 强制结束。
但优先用 kill -15(优雅终止),给进程时间保存数据。
验证恢复正常并做好日常监控
- 执行杀进程命令后,再跑一次
top,观察之前那个高CPU进程是否消失,CPU空闲百分比是否回到90%以上。 - 如果系统依然很慢,可能多个进程同时占资源,用
ps aux --sort=-%cpu | head -10检查前10个。 - 为避免下次再意外卡死,可以安装
glances或netdata做可视化监控,不过那属于进阶操作了。
万一误杀了系统关键进程怎么办? 别慌,直接 reboot 重启主机,所有进程会重新启动。
常见问题快速解答
Q:为什么top里看到CPU占用很高,但进程列表里找不到?
A:用 ps -eo pid,pcpu,comm | sort -nrk 2 | head 列出所有进程的CPU占用,有时top默认只显示用户进程,内核线程被隐藏。
Q:杀完进程后CPU占用还是100%?
A:很可能被杀的原进程有子进程继续运行,用 pstree -p 查看父子关系,或者直接杀掉进程组:kill -- -。
Q:每次重启后CPU又异常怎么办?
A:检查 /etc/cron.* 或 systemd 定时任务,可能有恶意脚本被配置成开机自启。也可以用 systemctl list-unit-files --state=enabled 查看自启服务。
掌握了这些命令,下次家里Linux主机CPU爆满时你就能淡定排查了。
建议收藏本文,需要时直接照着敲命令。