使用 cgroup(独立或作为 docker 或 kubernetes 的一部分)时,memory.limit_in_bytes
会将文件缓存计入进程内存使用量。这有一个我试图避免的意想不到的副作用。
通常,当您在 cgroup 之外运行进程时,如果发出多次写入,这些写入往往会累积到块缓存中,一旦缓存填满,它将停止 IO 操作,直到有足够的空间来继续写入。
如果您在具有内存限制的 cgroup(例如 docker 容器)内运行,并且您快速发出许多写入,则由于未完成的写入而达到内存限制时的行为是不可预测的。
如果到达那里,但主机的块缓存有空间,IO 操作而不是停顿,会因 ENOBUF 或类似错误而失败,这会导致许多应用程序失败,另一方面,如果块缓存已满,您会像往常一样遇到停顿。
有什么方法可以memory.limit_in_bytes
忽略文件缓存或至少避免不一致的行为而不修改所述应用程序。