文件描述符为何会耗尽:从内核内存到OOM Killer的三层陷阱

2024年4月,Amazon EKS的一个GitHub issue报告了一个诡异现象:Elixir应用容器频繁被OOMKilled,但监控显示容器的内存使用量远低于限制。排查发现,真正的元凶是容器被配置了过高的文件描述符限制(1048576),每个文件描述符在内核中都会分配相应的数据结构,累积起来消耗了大量的内核内存,最终触发了OOM Killer。 ...

12 min · 5548 words

BPF:一个"过期"技术的十五年逆袭

1992年12月,USENIX冬季会议上发表了一篇题为《The BSD Packet Filter: A New Architecture for User-level Packet Capture》的论文。作者Steven McCanne和Van Jacobson来自劳伦斯伯克利国家实验室,他们设计了一种新的内核架构用于网络数据包捕获。 ...

13 min · 6059 words

Page Cache的阴暗面:为什么write()成功返回数据却可能消失

2009年3月,Ubuntu用户论坛上出现了一连串关于"ext4数据丢失"的报告。用户们描述了一个令人不安的现象:系统正常关机后重启,发现最近编辑的文件变成了零字节。这不是磁盘故障,不是恶意软件,而是Linux内核中一个精心设计的性能优化机制——延迟分配(delayed allocation)——在特定场景下的"副作用"。 ...

11 min · 5510 words