在上周的文章《为什么容器内存占用居高不下,频频 OOM》 中,我根据现状进行了分析和说明,收到了很多读者的建议和疑惑,因此有了这一篇文章,包含更进一步的说明和排查。
疑问
在出现系统内存过高的情况下,我们可以通过 free -m
来查看当前系统的内存使用情况:
在发现是系统内存占用高后,就有读者提到,为什么不 “手动清理 Cache”,因为 Cache 高的话,可以通过 drop_caches 的方式来清理:
- 清理 page cache:
$ echo 1 > /proc/sys/vm/drop_caches
- 清理 dentries 和 inodes:
$ echo 2 > /proc/sys/vm/drop_caches
- 清理 page cache、dentries 和 inodes:
$ echo 3 > /proc/sys/vm/drop_caches
但新问题又出现了,因为我们的命题是在容器中,在 Kubernetes 中,若执行 drop_caches 相关命令,将会对 Node 节点上的所有其他应用程序产生影响,尤其是那些占用大量 IO 并由于缓冲区高速缓存而获得更好性能的应用程序,可能会产生 “负面” 后果。
我