空闲时可用内存远低于总内存

空闲时可用内存远低于总内存

我有一个服务器,我的free输出如下所示:

root@server:~# free -h
              total        used        free      shared  buff/cache   available
Mem:            31G        903M         22G        7.7G        8.2G         22G
Swap:          975M         38M        937M

现在这台服务器完全空闲,只运行一些服务,例如 SSH,完全没有负载,平均负载为 0.00。我已经尝试使用 清除缓冲区sync; echo 3 > /proc/sys/vm/drop_caches,缓冲区下降了,但如您所见,它仍然使用 8.2 G。

为什么总共31G,只用了1G,却只有22G可用?似乎内核确实无法提供超过 22G 的可用空间,因为 OOM 收割机会杀死请求更多内存的进程,但为什么呢?

我正在运行带有内核版本的 Ubuntu 18.04 服务器4.15.0-24-generic

答案1

好的,情况与此处描述的类似:https://serverfault.com/questions/288319/linux-not-freeing-large-disk-cache-when-memory-demand-goes-up

在我的例子中lsof,postgresql 查询日志文件有 276M,这看起来很可疑。我还在这里读到 postgresql 的共享缓冲区可能与它有关:https://serverfault.com/questions/515125/oom-despite-available-memory-cache/856010#856010

我可以重新启动 postgresql 服务,缓冲区/缓存下降了 7.5G。在生产环境中,人们可能会更详细地检查这些回复。

相关内容