2026-04-27 · os
【操作系统百科】内存回收
Linux 内存回收是 VM 最复杂的子系统之一。本文讲 active/inactive LRU、kswapd 与 direct reclaim、watermark 三线、swappiness 的真实含义、MGLRU 改造、memcg 回收与 PSI。




















容器共享内核 → 隔离不如虚机 → 但够用吗?答案取决于你的威胁模型。
flowchart TD
VM[虚拟机<br/>独立内核] --> HYPERVISOR[Hypervisor<br/>硬件隔离]
MICROVM[microVM<br/>Firecracker/Kata] --> HYPERVISOR
CONTAINER[容器<br/>共享内核] --> NS[namespace<br/>视图隔离]
CONTAINER --> CG[cgroup<br/>资源限制]
CONTAINER --> SEC[seccomp<br/>syscall 过滤]
CONTAINER --> CAP[capabilities<br/>权限限制]
classDef strong fill:#3fb95022,stroke:#3fb950,color:#adbac7;
classDef medium fill:#f0883e22,stroke:#f0883e,color:#adbac7;
classDef weak fill:#f8514922,stroke:#f85149,color:#adbac7;
class VM,HYPERVISOR strong
class MICROVM medium
class CONTAINER,NS,CG,SEC,CAP weak
| 层 | 机制 | 保护 |
|---|---|---|
| 视图 | namespace | 进程/网络/文件系统隔离 |
| 资源 | cgroup v2 | CPU/内存/IO 限制 |
| 系统调用 | seccomp-bpf | 禁止危险 syscall |
| 权限 | capabilities | 最小权限 |
| 文件系统 | overlay + read-only | 不可变基础层 |
| MAC | SELinux/AppArmor | 强制访问控制 |
容器和宿主共享同一个内核 → 内核漏洞 = 逃逸路径。
历史逃逸案例:
/proc/sys/ 部分参数全局共享podman run --userns=auto my_app容器内 root → 映射到宿主非特权 UID → 即使逃逸也只是普通用户。
Google 的用户态内核:
应用 → gVisor Sentry(用户态内核) → 有限 syscall → 宿主内核
应用 → 容器 → 轻量级 VM → 宿主内核
每个容器(或 pod)跑在独立的微虚拟机中 → 独立内核 → 硬件隔离。
启动时间 ~100ms → 接近容器。
AWS Lambda/Fargate 的基础:
应用 → Firecracker microVM → KVM → 宿主
| 方案 | 内核隔离 | 启动时间 | 兼容性 | 适用场景 |
|---|---|---|---|---|
| 容器 | 共享 | ms | 最好 | 可信工作负载 |
| gVisor | 用户态内核 | ms | 中等 | 多租户 |
| Kata | 独立内核 | ~100ms | 好 | 强隔离需求 |
| Firecracker | 独立内核 | ~100ms | 好 | 云函数/多租户 |
| 传统 VM | 独立内核 | 秒级 | 最好 | 最强隔离 |
# 当前容器安全配置
docker inspect --format '{{json .HostConfig.SecurityOpt}}' my_container
docker inspect --format '{{json .HostConfig.CapDrop}}' my_container
# user namespace
cat /proc/self/uid_map
# seccomp 状态
grep Seccomp /proc/1/status
# 内核漏洞检查
grep . /sys/devices/system/cpu/vulnerabilities/*podman / dockerrunsc(gVisor)kata-runtimefirecracker把当前热点继续串成多页阅读,而不是停在单篇消费。
2026-04-27 · os
Linux 内存回收是 VM 最复杂的子系统之一。本文讲 active/inactive LRU、kswapd 与 direct reclaim、watermark 三线、swappiness 的真实含义、MGLRU 改造、memcg 回收与 PSI。
2026-04-28 · os
swap 还值得开吗?本文讲 swap area 基础、swap cache、zram 压缩内存、zswap 前端压缩池、swappiness 的真实含义、容器里的 swap 策略,以及为什么现代 Android 全靠 zram 不靠磁盘。
2026-05-03 · os
buddy 只管页粒度(4K+),内核大多数对象只有几十到几百字节。slab/SLUB 在 buddy 之上做对象级缓存。本文讲 slab 历史、SLUB 接手、SLOB 退场、kmem_cache、per-CPU cache、KASAN 集成。
2026-05-07 · os
glibc malloc、tcmalloc、jemalloc、mimalloc 各有哲学。本文讲 arena、thread cache、size class、madvise 返还策略、碎片与 RSS 膨胀、如何根据负载选分配器。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。