我正在使用Ubuntu 18.04的裸机kubernetes集群上运行我的应用程序。长期以来,我在缓存内存方面遇到问题。我的某些组件是缓存内存,尽管已使用的内存约为计算机的1%,因为缓存的内存约为90%,kubelet会将该计算机上的所有pod逐出。
最近,我也面临磁盘压力,这是由计算机上运行的Pod的日志文件(位于/var/lib/docker/containers/*/*-json.log
)引起的。通过添加以下命令激活docker的日志旋转后:
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
对于/etc/docker/daemon.json
,我注意到了一个有趣的副作用。从下图可以看出,在我添加日志轮换的同时,缓存也消失了。我的问题是,码头工人日志文件和缓存之间有什么关系?
Linux缓存对RAM的磁盘访问,以加快将来的读取请求,这是预期的和令人希望的行为。当应用程序需要更多RAM时,可能会删除此磁盘缓存。另外,如果删除了大文件,我希望它们的缓存也将被删除。
这里的问题是当查看可用内存时是否要计算此磁盘缓存。通常您不需要,因为应用程序可以在需要时使用该内存。但是,在驱逐Pod时,某些工具(如Kubernetes)似乎会对其进行计数:https://github.com/kubernetes/kubernetes/issues/43916