凌晨两点,监控系统突然报警,服务器CPU飙升至100%,磁盘I/O告急,甚至连top命令都响应缓慢。这种紧急场景下,能否快速、准确地定位并解决问题,是衡量一个运维工程师能力的关键。本文整理了20条在真实生产环境中经过考验的Linux命令组合,旨在提供一套高效的排查思路,而不仅仅是命令列表。
一、CPU飙升时的排查组合
当系统响应缓慢,CPU使用率异常时,以下命令可以帮助你快速锁定元凶。
1. htop —— 增强型进程监控器
当经典的top命令因系统负载过高而卡顿时,htop提供了更友好的交互界面和可视化效果,是获取系统进程状态的可靠窗口。
htop
2. pidstat —— 精准的进程资源统计
此命令可以按指定间隔刷新,详细报告每个进程的CPU使用情况,有助于发现那些隐藏在systemd或其他父进程下的资源消耗者。
pidstat -u 1 5
3. ps aux --sort=-%cpu | head
最直接高效的“前十”命令,一眼找出消耗CPU最多的进程。
ps aux --sort=-%cpu | head
二、磁盘空间告急时的定位组合
磁盘爆满是常见的运维问题,快速找到“空间大户”是解决问题的第一步。
*4. du -sh | sort -rh | head**
在当前目录下,快速计算并排序各子目录/文件的大小,找出占用最大的项。曾有一次,正是通过它发现/var/log目录写入了超过200GB的日志。
du -sh * | sort -rh | head
5. ncdu —— 交互式磁盘分析工具
提供图形化的终端界面,可以交互式地浏览目录并分析磁盘使用情况,支持直接删除文件,比du命令更直观。
ncdu /
6. lsof +L1
列出所有链接计数为1的文件(通常意味着已被删除但仍有进程占用,导致空间未释放),这是排查磁盘空间被“幽灵”文件占用的实战命令。相比之下,lsof /的输出通常过于庞大。
lsof +L1
三、网络异常时的诊断组合
服务不可用,网络往往是首要怀疑对象。
7. ss -tuln
用于查看所有监听中的端口,其执行速度远快于传统的netstat命令。
ss -tuln
8. tcpdump -i eth0 port 80
强大的网络抓包工具,通过分析经过指定网卡和端口的数据包,可以定位复杂的网络故障,例如异常请求或攻击流量。
tcpdump -i eth0 port 80
9. curl -I http://127.0.0.1
快速检查本地服务的HTTP响应头,无需打开浏览器即可验证服务是否存活及基本状态。
curl -I http://127.0.0.1
四、内存吃紧时的分析组合
内存不足会导致系统频繁交换(swap),严重影响性能。
10. free -h
以人类可读的格式(GB/MB)清晰展示系统的总内存、已用内存、空闲内存及缓冲/缓存使用情况。
free -h
11. vmstat 1
以1秒为间隔输出虚拟内存统计信息,包括进程、内存、分页、块IO、中断和CPU活动,适合观察系统整体负载趋势。
vmstat 1
12. smem -r -k -p | head -20
显示每个进程的实际内存占用(USS、PSS、RSS),并按比例(-p)排序,比单纯看RSS更能反映真实的内存消耗。
smem -r -k -p | head -20
五、系统无响应或异常时的日志组合
当系统出现“玄学”故障时,日志是寻找线索的第一现场。
13. dmesg | tail
查看内核环形缓冲区的最新消息。很多硬件错误、驱动问题或OOM(内存溢出) killer的线索都藏在这里。
dmesg | tail
14. journalctl -xe
查询系统日志(适用于使用systemd的系统)。-x提供更多解释信息,-e直接跳转到日志末尾。绝大多数服务和应用问题都能在此找到相关记录。
journalctl -xe
15. uptime
查看系统运行时间、平均负载。有时服务异常并非软件问题,而是服务器运行时间过长,负载过高。
uptime
六、安全与入侵排查组合
保持对系统访问的警惕是运维安全的基础。
16. last / lastb
last查看成功登录的历史记录,lastb查看失败的登录尝试。对于发现非授权或异常时间的登录行为非常有用。
last
lastb
17. who / w
查看当前登录系统的用户信息及其正在执行的命令(w命令),可以即时发现是否有其他用户正在操作。
w
18. ps -ef | grep ssh
检查当前所有SSH相关的进程,有助于发现未授权的SSH隧道或可疑的持久化连接。
ps -ef | grep ssh
七、文件管理与系统维护组合
19. rsync -av --progress
用于文件同步和备份的最稳健命令之一。支持断点续传、保留权限属性、并显示进度,无论是迁移数据、同步日志还是紧急备份,都是可靠的选择。作为日常运维维护的必备工具,其可靠性在无数次任务中得到了验证。
rsync -av --progress /source/path/ /backup/path/
20. sync && echo 3 > /proc/sys/vm/drop_caches
手动将缓冲区数据写入磁盘(sync),并清空页缓存、目录项和inode缓存。在排查因缓存过多导致内存或I/O表现异常时,可以先尝试此命令释放资源,而非盲目重启。
sync && echo 3 > /proc/sys/vm/drop_caches
总结:工具背后的系统性思维
上述命令组合是针对特定故障场景的利器,但真正的运维能力在于根据现象,系统地串联使用这些工具进行诊断。从查看整体负载(uptime, htop),到定位具体资源消耗(pidstat, du),再到深挖日志线索(journalctl, dmesg),每一步都考验着技术人员的冷静与逻辑。
Linux的强大在于其透明性和可观测性。掌握这些命令,本质上是掌握了一套在复杂系统中定位问题、建立秩序的方法论。命令是工具,而面对突发故障时保持冷静、进行系统性思考的能力,才是运维工程师的核心武器。