第 3 章 · 03 存储、网络与性能排障 本节摘要:最后一层能力:存储体系(inode 深挖、ext4 vs xfs、LVM/RAID、挂载管理)、网络诊断(命令矩阵、bonding、DNS 查询)、性能分析(load average 解读、慢系统排查套路)、文本三剑客(grep/awk/sed)与容器隔离基础(命名空间)。末尾附原库四个动手练习。学完本节,面对一台"很慢/满了/连不上"的服务器,你有完整的排查路径。 学习目标 说出 inode 的作用与"磁盘满但 df 有空间"的排查路径。 对比 ext4 与 xfs、RAID 0/1/5/10、LVM 三层。 说出网络诊断命令矩阵与端口占用双查法。 解读 load average,说出慢系统排查的标准套路。
本节摘要:最后一层能力:存储体系(inode 深挖、ext4 vs xfs、LVM/RAID、挂载管理)、网络诊断(命令矩阵、bonding、DNS 查询)、性能分析(load average 解读、慢系统排查套路)、文本三剑客(grep/awk/sed)与容器隔离基础(命名空间)。末尾附原库四个动手练习。学完本节,面对一台"很慢/满了/连不上"的服务器,你有完整的排查路径。
ls -i(inode 号)、df -i(inode 使用率);df -i 确认。| 维度 | ext4 | xfs |
|---|---|---|
| 默认地位 | RHEL 6 及以前 | RHEL 7+ 默认 |
| 定位 | 通用老牌稳定 | 大文件/高并发写入强 |
| 缩减(shrink) | 支持 | 不支持(只能在线扩容) |
| 单文件上限 | 16 TiB | 8 EiB 级 |
| 修复工具 | e2fsck | xfs_repair |
mount / umount # 挂载/卸载 cat /proc/mounts # 当前挂载真相(mount 无输出时查这个) df -T # 文件系统类型+用量 df -h vs df -i # 块空间 vs inode
/etc/fstab 管开机持久挂载;lazy umount(umount -l)延迟卸载忙设备;swap 是磁盘交换空间,tmpfs 是占 RAM 的临时文件系统。
建文件三式:touch、cat > file+Ctrl+D、truncate -s <size>(或 dd/fallocate 建指定大小)。
| 场景 | 命令 |
|---|---|
| 接口/地址/路由 | ip link、ip addr、ip route |
| 连通性 | ping |
| 逐跳路径 | traceroute(递增 TTL 让路由器返回超时) |
| 端口↔进程 | netstat -tnlaup、lsof -i -n -P |
| 抓包 | tcpdump、wireshark |
| 裸 TCP 交互 | nc(可发 HTTP 请求) |
端口占用双查法:netstat -tnlp | grep <port> / lsof -i -n -P | grep <port>。
lo 回环接口:本机与自身通信,诊断与本地服务用。
bonding(网卡绑定)模式:balance-rr 轮询(吞吐)、active-backup 主备(容错)、balance-tlb 发送均衡、balance-alb 双向均衡。
/etc/hostname 是永久名;hostname/hostnamectl 可能只显示临时名;dig、host、nslookup;nmcli con mod "连接名" ipv4.dns "8.8.8.8" → nmcli con up 生效 → cat /etc/resolv.conf 验证。uptime/top 显示 1/5/15 分钟均值。它不是 CPU 使用率——包含 R 与 D 状态进程的排队长度;数值持续大于 CPU 核数说明存在排队。
| 资源 | 命令 |
|---|---|
| CPU | top、perf(采样剖析)、火焰图 |
| 内存 | free -h、top、ps -eo rss |
| 磁盘 | iostat -xz 1、df -h、du -sh |
| 网络 | sar -n TCP,ETCP 1、dstat -t |
| 进程 | pidstat、strace |
慢系统排查标准套路:
top 看异常进程 → dstat -t 查磁盘/网络吞吐 → sar 查网络统计 → iostat 查 I/O 等待 → strace 查进程行为
反直觉场景:CPU 负载高但没有高 CPU 进程 → 可能 D 状态进程堆积或内核线程消耗。
内存两概念:MemFree(完全未使用的物理 RAM)vs MemAvailable(新负载可用的内存,含可回收页,监控应看后者);OOM killer 在内存耗尽时按 oom_score 挑进程强杀。
| 工具 | 模型 | 典型用法 |
|---|---|---|
| grep | 过滤行 | grep -E "error|failure"(扩展正则或关系);grep '\baaa\b' 词边界 |
| cut | 按分隔符取段 | cut -d' ' -f1 取第一列 |
| awk | 逐行分列加工 | awk '{print $4}' 取第 4 列;awk 'length($0) > 79' 筛长行;awk -F ',' '{print $1}' 解析 CSV |
| sed | 流式替换编辑 | sed -i s/good/great/g file 原地全局替换;2,5d 删行 |
日志日期提取拆解(三段替换剥壳):
sed 's/.*\[//g;s/].*//g;s/:.*//g' # 去 [ 之前 → 去 ] 之后 → 去时间冒号段
退出码:0 成功,大于 0 错误;$? 只取上一条命令的退出码;管道表达式默认取最后一段的退出码。
| 命名空间 | 隔离内容 |
|---|---|
| PID | 每个 namespace 内第一个进程都是 PID 1 |
| Mount | 挂载点 |
| Network | 路由表/接口/ARP 表(默认互不相通,需 veth/bridge 打通) |
| UTS | 主机名/域名 |
| IPC | 进程间通信 |
| User | UID/GID(子命名空间内可以有 UID 0 的 root) |
| Time | 系统时间 |
命名空间是容器技术的底层机制,第 5 章会再见面。
按序 cd /tmp → cd .. → cd ~ → cd ..×2 → pwd 确认到根 / → cd - 回上次目录。考察 cd 全部变体。
touch x → mkdir content → mv x content → touch content/y → mkdir -p content/dir1/dir2/dir3(一次建多级)→ rm -rf content 整体删除。考察 -p/-rf 选项。
touch /tmp/x → cp x ~/ → cp x y → mkdir files 后 mv x y files → cp -r files copy_of_files(目录必须 -r)→ mv copy_of_files files2(改名)→ 清理。考察 cp/mv 二用。
sort ip_list | cut -d' ' -f1 | uniq -c | sort -n | tail -1
考察管道组合与 uniq 必须先排序的前提。
df -i 查 inode)lsof <FILE> 拿 PID → kill)下一节预告:Linux 在手,开始写自动化脚本——Shell 脚本编程。