HiHuo
首页
博客
手册
工具
关于
首页
博客
手册
工具
关于
  • 运维手册

    • Kubernetes 全栈实战与性能原理教程
    • 第一部分:Linux 基础与系统原理
    • 第二部分:Kubernetes 网络深度解析
    • 第三部分:Kubernetes 存储管理实战
    • 第四部分:Kubernetes 调度器深度解析
    • 第五部分:Kubernetes 性能调优实战
    • 第六部分:CNI 与 eBPF 网络深度实践
    • 第七部分:Kubernetes 生产级调优案例
    • 第八部分:命令速查与YAML模板库
    • 第九部分:实验环境快速搭建指南
    • 第十部分:面试题库与进阶路径
    • 第11章:Kubernetes 网络·存储·大文件排查专项手册

第一部分:Linux 基础与系统原理

从 Linux 内核到容器运行时的完整技术栈解析

目录

  • 第1章:Linux 进程、线程与调度机制
  • 第2章:Linux 内存管理与容器隔离
  • 第3章:Linux 网络栈原理与容器网络
  • 实验环境搭建
  • 命令速查表

第1章:Linux 进程、线程与调度机制

1.1 调度的本质:CPU 是稀缺资源

在任何系统中,CPU 是最核心的竞争资源。调度器(Scheduler)就是负责决定:

"在任意时刻,哪个任务(线程)能使用 CPU?"

Linux 内核的调度目标:

目标说明实现机制
公平性(Fairness)每个任务都有机会运行CFS 红黑树调度
效率(Efficiency)CPU 不闲着多核并行调度
实时性(Responsiveness)响应交互任务优先级调度
可伸缩性(Scalability)支持多核、NUMA 架构每 CPU 运行队列

1.2 进程与线程的核心区别

概念进程 (Process)线程 (Thread)
定义操作系统分配资源的最小单位操作系统调度执行的最小单位
地址空间独立共享(同一进程下线程共享堆)
通信方式管道、消息队列、共享内存共享变量、锁、信号量
切换代价高(涉及页表、上下文)低(共享内核对象)
调度粒度进程级线程级

关键理解:Linux 中的线程,本质上仍是"轻量进程"(LWP)。系统通过 task_struct 统一表示进程/线程,只是 clone() 参数不同。

1.3 Linux 调度器(CFS)原理

1.3.1 运行队列 (Run Queue)

每个 CPU 核心维护一个 runqueue,内部是红黑树(rbtree)。

struct cfs_rq {
    struct rb_root tasks_timeline; // 红黑树
    struct sched_entity *curr;     // 当前运行任务
    u64 min_vruntime;              // 最小虚拟运行时间
};

每个任务有一个 虚拟运行时间 vruntime,越小表示"更少被执行过"。

1.3.2 CFS 调度算法

核心思想:所有任务都共享 CPU 时间,尽可能公平分配。

工作流程:

  1. 计算每个进程的 vruntime
  2. 选择最小的 vruntime 任务执行
  3. 每执行一段时间(调度周期),更新 vruntime
  4. 若任务阻塞/退出/完成,红黑树重新平衡

权重(Nice 值):

Nice 值权重占比说明
-2088761最多最高优先级
01024默认普通优先级
+1915最少最低优先级

1.4 GMP 调度与 Linux 调度器的映射关系

Go 的 GMP 模型本质上是用户态协程调度,与 Linux CFS 的内核调度层叠关系:

层级实体调度对象说明
用户态goroutine (G)Go runtime 层协程调度
中间层M(线程)映射到 OS 线程系统线程
内核态CPU + CFS调度系统线程(M)内核调度

理解关键:

  • Linux 调度的是线程 (M)
  • Go runtime 调度的是 goroutine (G)
  • G 被分配到 M,M 绑定到 P(调度器),最终落到 CPU

这就是为什么:

  • GOMAXPROCS ≈ 同时运行的 M 数量
  • 若设置过大,会导致上下文切换频繁
  • 若设置过小,CPU 利用率不高

1.5 NUMA(Non-Uniform Memory Access)影响

多 CPU 系统(尤其物理多路)会形成多个 NUMA 节点:

NUMA Node 0          NUMA Node 1
├── CPU 0-7          ├── CPU 8-15
├── Memory 32GB      ├── Memory 32GB
└── PCIe 设备        └── PCIe 设备

性能影响:

  • 本地 NUMA 节点访问:延迟 ~100ns
  • 远程 NUMA 节点访问:延迟 ~300ns(3倍差异)

1.6 CPU 调度与容器化的影响

容器(cgroup)改变了调度粒度:

层级控制器功能文件路径
CPU 限制cpu.cfs_quota_us限制 CPU 时间配额/sys/fs/cgroup/cpu/
CPU 周期cpu.cfs_period_us时间周期/sys/fs/cgroup/cpu/
CPU 绑定cpuset.cpus绑定核/sys/fs/cgroup/cpuset/
CPU 权重cpu.shares调整优先级/sys/fs/cgroup/cpu/

1.7 实战实验:进程调度分析

实验1:查看当前系统调度器

# 查看当前调度器
cat /sys/block/sda/queue/scheduler

# 查看进程线程分布
ps -eLo pid,tid,psr,comm | head -20

# 查看 CPU 使用情况
top -H -p $(pgrep -f "stress-ng")

实验2:CPU 亲和性绑定

# 安装压测工具
sudo apt-get install stress-ng

# 启动 CPU 密集型任务
stress-ng --cpu 4 --timeout 60s &

# 绑定到特定 CPU
taskset -c 1,2 stress-ng --cpu 2 --timeout 30s &

# 查看绑定效果
ps -eo pid,psr,comm | grep stress-ng

实验3:Go GMP 调度可视化

创建 gmp_demo.go:

package main

import (
    "fmt"
    "runtime"
    "time"
)

func main() {
    // 设置 GOMAXPROCS
    runtime.GOMAXPROCS(4)
    
    // 启动多个 goroutine
    for i := 0; i < 10; i++ {
        go func(id int) {
            for {
                fmt.Printf("Goroutine %d on M\n", id)
                time.Sleep(100 * time.Millisecond)
            }
        }(i)
    }
    
    // 查看调度信息
    go func() {
        for {
            fmt.Printf("NumGoroutine: %d\n", runtime.NumGoroutine())
            time.Sleep(1 * time.Second)
        }
    }()
    
    time.Sleep(10 * time.Second)
}

运行并分析:

# 编译运行
go build gmp_demo.go
GODEBUG=schedtrace=1000 ./gmp_demo

# 查看调度跟踪
GODEBUG=schedtrace=1000,scheddetail=1 ./gmp_demo

实验4:NUMA 拓扑分析

# 查看 NUMA 拓扑
numactl --hardware

# 查看进程 NUMA 绑定
numactl --show

# 绑定进程到特定 NUMA 节点
numactl --cpunodebind=0 --membind=0 ./myapp

1.8 性能优化要点

场景问题解决方案
多线程 CPU 抢占上下文切换多降低 GOMAXPROCS 或使用协程池
容器内 CPU 限制不同容器争抢使用 cgroup 限制 / QoS
NUMA 延迟高内存跨节点访问启用 NUMA-aware scheduling
Go Runtime 与内核调度冲突CPU 负载不均打开 GODEBUG=schedtrace=1000 调度日志分析

第2章:Linux 内存管理与容器隔离

2.1 内存的本质:虚拟化与分层

Linux 的内存管理体系不是"物理分配"的,而是一个虚拟层 → 页缓存层 → 物理层的多层架构。

用户空间
│
├── 虚拟内存(Virtual Memory)
│     └── 每个进程独立的虚拟地址空间(4GB 或 128TB)
│
├── 页缓存(Page Cache)
│     └── 文件系统层缓冲区,提高 IO 性能
│
└── 物理内存(Physical Memory)
      └── 实际的 DRAM + SWAP

关键点:每个进程看到的内存(虚拟内存)并不等于真实物理内存。内核通过**页表(Page Table)**将虚拟页映射到物理页。

2.2 虚拟内存与页表机制

2.2.1 虚拟内存结构(64位系统)

+-------------------+
| 用户空间 (0x0000_0000_0000_0000 - 0x0000_7fff_ffff_ffff)
+-------------------+
| 内核空间 (0xffff_8000_0000_0000 - 0xffff_ffff_ffff_ffff)
+-------------------+
  • 每个进程都拥有自己的虚拟地址空间
  • 内核空间是共享的
  • 页大小通常为 4KB(HugePages 可以是 2MB 或 1GB)

2.2.2 页表转换(MMU + TLB)

虚拟地址 → 页表(多级映射) → 物理页帧 → DRAM

CPU 中的 MMU(Memory Management Unit)负责转换,TLB 缓存最近使用的页表项,加速访问。

2.3 页缓存与缓存回收机制

Linux 通过 Page Cache 缓存文件数据,极大提高读写性能。

缓存类型说明查看命令
Page Cache文件内容缓存(read/write)cat /proc/meminfo | grep Cached
Dentry Cache目录项缓存cat /proc/meminfo | grep Dentry
Inode Cache文件元数据缓存cat /proc/meminfo | grep Inode

缓存回收机制:

Active File Pages ↔ Inactive File Pages ↔ Free Pages

2.4 Swap 与 OOM 杀手机制

2.4.1 Swap 交换区

当物理内存不足时,系统会将冷页(不常用)写入磁盘 Swap 分区。

  • 优点:防止 OOM
  • 缺点:速度极慢(磁盘IO远慢于内存)

参数调优:

# 查看当前 swappiness
cat /proc/sys/vm/swappiness

# 调整 swappiness(0-100,值越大越倾向使用 swap)
sudo sysctl vm.swappiness=10

# 永久设置
echo 'vm.swappiness=10' >> /etc/sysctl.conf

2.4.2 OOM Killer

当物理 + swap 全部耗尽时,内核会执行 "OOM 杀手"。

执行逻辑:

  1. 扫描所有进程
  2. 根据 OOM Score 选出"最不重要"的进程
  3. 杀掉它释放内存

查看 OOM 历史:

# 查看 OOM 日志
dmesg | grep -i kill

# 查看进程 OOM 分数
cat /proc/PID/oom_score
cat /proc/PID/oom_score_adj

2.5 Cgroups 内存隔离机制(容器核心)

容器中的"内存限制",本质是 cgroup 控制。

2.5.1 Cgroup 内存控制文件

文件功能示例
memory.limit_in_bytes限制最大内存使用量echo 512M > memory.limit_in_bytes
memory.usage_in_bytes当前使用量cat memory.usage_in_bytes
memory.stat内存统计信息cat memory.stat
memory.oom_control是否触发 OOMcat memory.oom_control

2.5.2 实战:创建内存限制容器

# 创建 cgroup
sudo mkdir /sys/fs/cgroup/memory/myapp

# 设置内存限制为 100MB
echo 104857600 > /sys/fs/cgroup/memory/myapp/memory.limit_in_bytes

# 启用 OOM 控制
echo 1 > /sys/fs/cgroup/memory/myapp/memory.oom_control

# 运行程序并加入 cgroup
echo $$ > /sys/fs/cgroup/memory/myapp/cgroup.procs

# 测试内存限制
python3 -c "
import time
data = []
while True:
    data.append('x' * 1024 * 1024)  # 每次分配 1MB
    print(f'Allocated: {len(data)}MB')
    time.sleep(1)
"

2.6 Kubernetes 内存限制与 QoS

在 K8s 中,容器的内存限制最终落到 cgroup 层。

类型定义行为示例
requests.memory保证分配量调度依据requests: {memory: "256Mi"}
limits.memory上限超出将被杀掉limits: {memory: "512Mi"}

QoS 分类:

类别条件OOM 优先级示例
Guaranteedrequests = limits最不容易被杀requests: {memory: "512Mi"}, limits: {memory: "512Mi"}
Burstablerequests < limits中等requests: {memory: "256Mi"}, limits: {memory: "512Mi"}
BestEffort未设置 requests最容易被杀无 requests/limits

2.7 实战实验:内存管理与 OOM 分析

实验1:内存使用监控

# 查看系统内存使用
free -h
cat /proc/meminfo

# 查看进程内存使用
ps aux --sort=-%mem | head -10

# 查看容器内存使用(Docker)
docker stats

# 查看容器内存使用(K8s)
kubectl top pod

实验2:OOM 触发与分析

创建 oom_test.py:

#!/usr/bin/env python3
import time
import os

def trigger_oom():
    """触发 OOM 的测试程序"""
    print(f"PID: {os.getpid()}")
    print("开始分配内存...")
    
    data = []
    try:
        while True:
            # 每次分配 100MB
            chunk = 'x' * (100 * 1024 * 1024)
            data.append(chunk)
            print(f"已分配: {len(data) * 100}MB")
            time.sleep(1)
    except MemoryError:
        print("内存不足,程序被终止")
    except Exception as e:
        print(f"其他错误: {e}")

if __name__ == "__main__":
    trigger_oom()

运行实验:

# 设置内存限制
ulimit -v 500000  # 限制虚拟内存为 500MB

# 运行 OOM 测试
python3 oom_test.py

# 查看 OOM 日志
dmesg | tail -20

实验3:内存泄漏模拟与定位

创建 memory_leak.go:

package main

import (
    "fmt"
    "runtime"
    "time"
)

func main() {
    // 启用 pprof
    go func() {
        for {
            var m runtime.MemStats
            runtime.ReadMemStats(&m)
            fmt.Printf("Alloc = %d KB, Sys = %d KB, NumGC = %d\n", 
                m.Alloc/1024, m.Sys/1024, m.NumGC)
            time.Sleep(5 * time.Second)
        }
    }()
    
    // 模拟内存泄漏
    for i := 0; i < 1000; i++ {
        data := make([]byte, 1024*1024) // 1MB
        _ = data
        time.Sleep(100 * time.Millisecond)
    }
    
    time.Sleep(30 * time.Second)
}

运行并分析:

# 编译运行
go build memory_leak.go
./memory_leak &

# 使用 pprof 分析
go tool pprof http://localhost:6060/debug/pprof/heap

# 生成内存使用图
go tool pprof -png http://localhost:6060/debug/pprof/heap > heap.png

实验4:cgroup v2 内存限制

# 创建 cgroup v2 目录
sudo mkdir -p /sys/fs/cgroup/myapp

# 设置内存限制
echo 200M > /sys/fs/cgroup/myapp/memory.max

# 设置内存软限制
echo 150M > /sys/fs/cgroup/myapp/memory.high

# 将当前 shell 加入 cgroup
echo $$ > /sys/fs/cgroup/myapp/cgroup.procs

# 运行内存测试
python3 -c "
import time
data = []
for i in range(300):
    data.append('x' * 1024 * 1024)
    print(f'Allocated: {i+1}MB')
    time.Sleep(0.1)
"

2.8 性能优化与排障总结

场景原因解决方案命令
容器频繁 OOMlimit 太低调整 limits 或启用 swapkubectl describe pod
系统 swap 过高swappiness 太大调小到 10 以下sysctl vm.swappiness=10
内存碎片多Page Cache 占用定期 drop_cachesecho 3 > /proc/sys/vm/drop_caches
内核杀错进程OOMScore 调整oom_score_adj 设为负值echo -1000 > /proc/PID/oom_score_adj
容器假死内存压缩 + I/O 拥塞禁止 swap,使用内存预留memory.swappiness=0

第3章:Linux 网络栈原理与容器网络

3.1 Linux 网络栈总览

从一个数据包发出到到达另一台机器,Linux 内核网络栈经历以下路径:

用户空间 → Socket → 内核网络栈 → 驱动 → 网卡 → 物理链路
                                        ↓
                        (远端)
物理链路 → 网卡 → 内核网络栈 → Socket → 用户空间

在容器环境下,只是多了一层虚拟抽象:

容器A eth0 → vethA ↔ vethB → bridge(docker0/cni0) → eth0 → 外网

3.2 Namespace:隔离的核心机制

Linux 的 Namespace 提供了资源隔离机制。网络隔离靠的是 Network Namespace (netns)。

类型功能查看命令
pid进程号隔离ls /proc/*/ns/pid
mnt文件系统挂载隔离ls /proc/*/ns/mnt
uts主机名隔离hostname
ipc进程间通信隔离ls /proc/*/ns/ipc
net网络设备/路由表隔离ip netns list
user用户 UID/GID 隔离ls /proc/*/ns/user

3.3 veth pair:虚拟以太网线缆

veth 就是"一根虚拟网线的两头",当一端发包,另一端一定能收到。

容器 A (eth0)  <-->  vethA ↔ vethB  <-->  宿主机 bridge (docker0)

特点:

  • 一端在容器 netns,另一端在 host
  • 一端关闭,另一端自动关闭
  • 内核层面通过 ring buffer 通信,无需物理 IO

3.4 Bridge:虚拟交换机(docker0 / cni0)

Bridge 是 Linux 实现的虚拟交换机,负责容器互联。

当你运行:

docker run -it busybox

系统自动创建:

  • 容器内:eth0
  • 宿主机:vethXYZ(与容器 eth0 绑定)
  • 桥接设备:docker0 / cni0
  • 分配虚拟 IP,如 172.17.0.2

数据流动:

容器 eth0 → veth → docker0 → eth0(宿主机)→ 外网

3.5 iptables 与 NAT 转发机制

iptables 是 Linux 的防火墙 + NAT 转发引擎。Kubernetes 的 kube-proxy 就是基于它实现的。

iptables 五链模型:

PREROUTING → INPUT → FORWARD → OUTPUT → POSTROUTING
链作用示例
PREROUTING数据包进入系统前处理(DNAT)目标地址转换
INPUT进入本机的数据包本地进程接收
FORWARD转发经过的数据包路由器功能
OUTPUT本地产生的数据包本地进程发送
POSTROUTING出口 NAT(SNAT)源地址转换

3.6 conntrack:连接跟踪系统

conntrack 是 iptables 背后的连接追踪模块。它记录所有经过的 TCP/UDP 流状态,用于 NAT、负载均衡。

查看连接表:

# 查看连接数量
conntrack -L | wc -l

# 查看连接统计
conntrack -S

# 查看特定连接
conntrack -L -p tcp --dport 80

常见性能问题:

  • 表容量限制(nf_conntrack_max)
  • 超时连接未清理
  • 高并发时内存占用大

调优:

# 增加连接表大小
sudo sysctl -w net.netfilter.nf_conntrack_max=262144

# 调整超时时间
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=7200

3.7 实战实验:容器网络构建

实验1:手动创建容器网络

#!/bin/bash
# 创建完整的容器网络环境

# 1. 创建 netns
sudo ip netns add ns1
sudo ip netns add ns2

# 2. 创建网桥
sudo ip link add br0 type bridge
sudo ip addr add 10.10.0.1/24 dev br0
sudo ip link set br0 up

# 3. 创建 veth pair 1
sudo ip link add veth1 type veth peer name veth1-br
sudo ip link set veth1 netns ns1
sudo ip link set veth1-br master br0
sudo ip link set veth1-br up

# 4. 配置 ns1 网络
sudo ip netns exec ns1 ip addr add 10.10.0.2/24 dev veth1
sudo ip netns exec ns1 ip link set veth1 up
sudo ip netns exec ns1 ip route add default via 10.10.0.1

# 5. 创建 veth pair 2
sudo ip link add veth2 type veth peer name veth2-br
sudo ip link set veth2 netns ns2
sudo ip link set veth2-br master br0
sudo ip link set veth2-br up

# 6. 配置 ns2 网络
sudo ip netns exec ns2 ip addr add 10.10.0.3/24 dev veth2
sudo ip netns exec ns2 ip link set veth2 up
sudo ip netns exec ns2 ip route add default via 10.10.0.1

# 7. 测试连通性
echo "测试 ns1 到 ns2 的连通性:"
sudo ip netns exec ns1 ping -c 3 10.10.0.3

# 8. 清理(可选)
# sudo ip netns del ns1
# sudo ip netns del ns2
# sudo ip link del br0

实验2:iptables NAT 规则实战

# 1. 查看当前 NAT 规则
sudo iptables -t nat -L -n -v

# 2. 创建 DNAT 规则(端口转发)
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.10.0.2:80

# 3. 创建 SNAT 规则(源地址转换)
sudo iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -j MASQUERADE

# 4. 查看规则
sudo iptables -t nat -L -n -v

# 5. 测试规则
curl -I http://localhost:8080

# 6. 清理规则
sudo iptables -t nat -D PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.10.0.2:80
sudo iptables -t nat -D POSTROUTING -s 10.10.0.0/24 -j MASQUERADE

实验3:网络性能测试

# 1. 安装测试工具
sudo apt-get install iperf3

# 2. 在 ns1 启动服务端
sudo ip netns exec ns1 iperf3 -s &

# 3. 在 ns2 启动客户端
sudo ip netns exec ns2 iperf3 -c 10.10.0.2 -t 30

# 4. 测试延迟
sudo ip netns exec ns1 ping -c 100 10.10.0.3 | tail -1

# 5. 查看网络统计
sudo ip netns exec ns1 ss -s
sudo ip netns exec ns2 ss -s

实验4:conntrack 连接跟踪分析

# 1. 查看连接跟踪状态
sudo conntrack -S

# 2. 建立连接并观察
sudo ip netns exec ns1 nc -l 8080 &
sudo ip netns exec ns2 nc 10.10.0.2 8080 &

# 3. 查看连接表
sudo conntrack -L | grep 10.10.0

# 4. 查看连接详细信息
sudo conntrack -L -p tcp --dport 8080

# 5. 清理连接
sudo conntrack -D -p tcp --dport 8080

3.8 网络性能优化与排查

3.8.1 性能瓶颈常见原因

层症状解决思路工具
veth/bridge延迟高改用 macvlan/ipvlanping, iperf3
conntrack丢包调大 nf_conntrack_maxconntrack -S
MTU包被丢弃统一 MTU (1450 for VXLAN)ip link show
多核调度单核满载启用 RPS/RFScat /proc/interrupts
eBPFservice 转发慢启用 Cilium eBPF 模式cilium status

3.8.2 内核调优建议

# TCP 参数优化
sudo sysctl -w net.core.somaxconn=4096
sudo sysctl -w net.ipv4.tcp_tw_reuse=1
sudo sysctl -w net.ipv4.tcp_fin_timeout=10
sudo sysctl -w net.core.netdev_max_backlog=4096

# 连接跟踪优化
sudo sysctl -w net.netfilter.nf_conntrack_max=524288
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=7200

# 网络缓冲区优化
sudo sysctl -w net.core.rmem_max=16777216
sudo sysctl -w net.core.wmem_max=16777216

3.8.3 工具链

工具用途示例
ss -s, ss -tnpSocket 状态ss -s
tcpdump, wireshark抓包分析tcpdump -i any port 80
ethtool, ifconfig网卡性能ethtool -S eth0
conntrack-tools连接跟踪conntrack -L
nstat, sar -n内核网络指标nstat -z
iperf3带宽测试iperf3 -c server

实验环境搭建

环境要求

  • Ubuntu 20.04+ 或 CentOS 8+
  • 至少 4GB 内存
  • 至少 2 个 CPU 核心
  • 网络连接

快速安装脚本

#!/bin/bash
# Linux 基础实验环境安装脚本

set -e

echo "开始安装 Linux 基础实验环境..."

# 更新系统
sudo apt-get update

# 安装基础工具
sudo apt-get install -y \
    stress-ng \
    htop \
    iotop \
    iperf3 \
    tcpdump \
    wireshark \
    conntrack \
    iproute2 \
    bridge-utils \
    cgroup-tools \
    golang-go \
    python3 \
    python3-pip

# 安装 Go 工具
go install github.com/google/pprof@latest

# 创建实验目录
mkdir -p ~/linux-experiments
cd ~/linux-experiments

# 下载实验脚本
cat > run_experiments.sh << 'EOF'
#!/bin/bash
echo "Linux 基础实验环境已准备就绪!"
echo "可用的实验:"
echo "1. 进程调度实验"
echo "2. 内存管理实验"
echo "3. 网络栈实验"
echo "4. 容器网络实验"
EOF

chmod +x run_experiments.sh

echo "安装完成!运行 ~/linux-experiments/run_experiments.sh 开始实验"

命令速查表

进程与调度

命令功能示例
ps -eLo pid,tid,psr,comm查看线程调度ps -eLo pid,tid,psr,comm | head -10
taskset -c 1,2 ./app绑定 CPU 核心taskset -c 0-3 stress-ng --cpu 4
numactl --hardware查看 NUMA 拓扑numactl --hardware
perf top性能分析perf top -p $(pgrep myapp)
htop系统监控htop

内存管理

命令功能示例
free -h查看内存使用free -h
cat /proc/meminfo详细内存信息cat /proc/meminfo
cat /proc/PID/status进程内存状态cat /proc/$$/status
dmesg | grep -i oom查看 OOM 日志dmesg | grep -i oom
echo 3 > /proc/sys/vm/drop_caches清理页缓存sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'

网络管理

命令功能示例
ip netns list查看网络命名空间ip netns list
ip link show查看网络接口ip link show
brctl show查看网桥brctl show
iptables -t nat -L -n查看 NAT 规则sudo iptables -t nat -L -n
conntrack -L查看连接跟踪sudo conntrack -L
ss -tnp查看 Socket 状态ss -tnp
tcpdump -i any抓包分析sudo tcpdump -i any port 80

系统监控

命令功能示例
top系统监控top
iostat -x 1I/O 监控iostat -x 1
vmstat 1虚拟内存统计vmstat 1
sar -n DEV 1网络统计sar -n DEV 1
perf stat性能统计perf stat ./myapp

Prev
Kubernetes 全栈实战与性能原理教程
Next
第二部分:Kubernetes 网络深度解析