下面这 10 条命令,是自己平时在生产环境排错时翻来覆去会用到的。整体思路是:先看外部连通性,再查本机服务,最后深入内核和系统调用。
1. du:快速定位磁盘占用大户
du -xh /var --max-depth=1 | sort -h | tail -5
找出占用磁盘最大的文件夹。磁盘爆满、需要定位占用源时用。
2. lsof:揪出已删除但仍被占用的文件
lsof +L1 | grep deleted
列出已删除但进程仍占用的文件。磁盘显示 100% 占用,但 du 查出来占用很低时使用。重启对应进程即可释放空间。
3. ss:查看监听端口和对应进程
ss -tulnp
查看监听端口以及对应的进程。服务显示正在运行,但外部无法连接时使用。
4. nc:测试端口连通性
nc -zv <主机> <端口>
测试当前环境能否连通指定端口。SSH、数据库连接失败时使用。成功代表网络通;拒绝连接代表该端口没有服务监听;超时代表防火墙或安全组拦截。
5. dmesg:查看内核相关日志
dmesg -T | grep -i -E "oom|error|fail"
查看内核有关内存、磁盘、硬件的日志。应用频繁崩溃,但应用日志没有报错时使用,主要用来排查 OOM 杀手。
6. pidstat:按周期观察进程 CPU 占用
pidstat 2 5
每 2 秒输出一次各进程 CPU 占用,一共输出 5 组。服务器卡顿、top 刷新太快看不清元凶时使用。加上 -d 参数可以看磁盘 IO。
7. iostat:检查磁盘延迟和使用率
iostat -xz 1
输出每个磁盘的延迟(await)和使用率(%util)。CPU 空闲但服务器反应很慢时使用。await 高代表磁盘是瓶颈。
8. tcpdump:抓取指定端口的实时网络包
tcpdump -i any port 443 -nn
用 tcpdump 抓取指定端口的实时网络包。nc 探测端口通,但请求依旧失败或超时的时候使用,可以观察数据包是否到达、有无回包、是否被重置。
9. strace:跟踪进程的系统调用
strace -p <进程PID>
查看进程发起的所有 系统调用。程序卡死、无提示静默失败时使用,可以看到缺失文件、权限拒绝、连接一直无法建立等问题。
10. pstree:查看进程父子关系
pstree -p
以树形展示进程父子关系。出现大量子进程,需要找到父进程时使用。
排错思路:先从外部连通性入手(nc、tcpdump),再检查本机服务(ss、lsof),最后深入底层(dmesg、strace)。
|