Skip to content

Linux 进阶命令与排障 · 九、网络分层排障至十五、排障记录模板 ​

返回分篇目录

先按通用框架保存现场,再从故障剧本选择具体检查。需要操作细节时直接进入 systemd、CPU/内存、磁盘 或 网络;排障记录模板用于保存结论。

九、网络分层排障 ​

9.1 从本机到应用逐层验证 ​

bash
# 地址和路由
ip -brief address
ip route get <destination-ip>

# DNS
getent ahosts <hostname>
dig +short <hostname>

# TCP
nc -vz -w 3 <host> <port>

# TLS
openssl s_client -connect <host>:<port> -servername <hostname> </dev/null

# HTTP
curl --connect-timeout 3 --max-time 10 -v https://<hostname>/<path>

curl -k 会跳过 TLS 证书验证,只适合隔离的临时诊断,不能成为生产调用或修复方案。

9.2 端口和连接状态 ​

bash
ss -lntup
ss -s
ss -tan state established
ss -tan state time-wait | wc -l
sudo ss -lntp 'sport = :<port>'

9.3 路由路径和抓包 ​

bash
tracepath <host>
traceroute <host>
sudo tcpdump -ni <interface> host <host> and port <port>

抓包可能包含认证信息和业务数据。限定网卡、主机、端口、包数和时间,按敏感数据管理:

bash
sudo timeout 30s tcpdump -ni <interface> -c 500 host <host> and port <port>

十、SSH 与安全传输 ​

10.1 连接和诊断 ​

bash
ssh <user>@<host>
ssh -p <port> <user>@<host>
ssh -v <user>@<host>             # 一层调试,最多可用 -vvv
ssh -J <jump-user>@<jump-host> <user>@<target-host>

~/.ssh/config 示例:

text
Host app-prod
  HostName <target-host>
  User <user>
  ProxyJump <jump-user>@<jump-host>
  IdentityFile ~/.ssh/<private-key>
  IdentitiesOnly yes

首次连接应通过可信渠道核对主机密钥指纹。主机密钥变化可能是正常重装,也可能是中间人攻击;不要未经核验就删除 known_hosts 条目。

10.2 文件传输 ​

bash
scp <file> <user>@<host>:<destination>
sftp <user>@<host>
rsync -av --dry-run <source>/ <user>@<host>:<destination>/
rsync -av <source>/ <user>@<host>:<destination>/

rsync 源路径结尾的 / 表示复制目录内容;无 / 表示复制目录本身。使用 --delete 会删除目标端多余文件,必须先运行完全相同参数的 --dry-run 并审批。

10.3 端口转发 ​

bash
# 本地 8080 转到远端只能从跳板机访问的 service:80
ssh -N -L 127.0.0.1:8080:<service-host>:80 <user>@<jump-host>

# SOCKS5 代理
ssh -N -D 127.0.0.1:1080 <user>@<jump-host>

绑定到 127.0.0.1,避免无意把内部服务暴露给局域网。端口转发仍受公司访问策略约束。

10.4 私钥权限 ​

bash
chmod 700 ~/.ssh
chmod 600 ~/.ssh/<private-key>
chmod 600 ~/.ssh/config
chmod 644 ~/.ssh/known_hosts

不要复制、提交或聊天传输私钥。怀疑泄露时立即吊销并轮换,而不是只删除本地文件。

十一、进程和资源限制 ​

bash
ulimit -a
ulimit -n                    # 当前 Shell 的文件描述符软限制
cat /proc/<pid>/limits
sysctl <key>
systemctl show <service> -p LimitNOFILE

临时 sysctl -w 或提高 ulimit 并不一定影响已启动服务。systemd 服务通常应通过 Unit 的资源限制配置,经验证和变更流程发布。

11.1 cgroup 与 systemd 资源视图 ​

bash
systemd-cgtop
systemctl status <service>
systemctl show <service> -p MemoryCurrent -p CPUUsageNSec -p TasksCurrent

容器或服务的资源受 cgroup 限制时,主机仍有空闲资源也可能发生 OOM 或节流。

十二、定时任务 ​

bash
crontab -l
sudo crontab -l -u <user>
systemctl list-timers --all

Cron 环境通常比交互式 Shell 更精简,应使用绝对路径、明确工作目录、记录标准输出与错误,并避免把凭据写在 crontab 中。

systemd timer 排查:

bash
systemctl status <timer>.timer
systemctl list-timers <timer>.timer
journalctl -u <timer>.service --since today

十三、会话和长任务 ​

bash
nohup <command> > <log-file> 2>&1 &
disown

更可控的生产方式是使用 systemd、作业调度器或容器平台,它们能定义重启、日志、资源和生命周期。交互式维护可使用 tmux:

bash
tmux new -s maintenance
tmux list-sessions
tmux attach -t maintenance

十四、常见故障剧本 ​

以下按现象选择证据和验证标准;具体命令集中在对应工具章节,避免在每个剧本重复抄一遍。

现象首先确认下一步与恢复标准
服务启动失败systemd 状态与 journal,核对 Unit、退出码、用户和工作目录查配置、权限、端口、依赖与资源限制;修复后同时验证端口、健康检查和业务请求,不能只看 active
磁盘满容量/inode、已删除仍占用文件区分容量与 inode,再找增长来源;按留存策略轮转、归档或扩容后重新测量,不直接删数据库或运行时文件
CPU 突升CPU 采样、请求量、延迟、近期发布关联重试、GC、线程数与流量;与正常吞吐下的基线比较,确认业务延迟和错误率恢复
内存耗尽/OOM内存与内核日志、cgroup 限制区分主机 OOM、cgroup OOM、缓存或泄漏;保留趋势和进程证据,重启后的短暂正常不等于根因已修复
域名能解析但请求失败分层网络验证的 DNS → 路由 → TCP → TLS → HTTP记录每层实际错误;修复后在原调用路径和超时约束下重试业务请求

十五、排障记录模板 ​

text
事件:
影响范围:
首次发现时间(含时区):
最近正常时间:
当前症状与错误:
目标主机/服务/版本:
近期变更:
已验证事实:
待验证假设:
已执行动作与结果:
止损状态:
回滚条件:
下一步与负责人:

完整记录能防止重复试错,也能把“相关”与“因果”区分开来。

继续阅读