我有一个服务器,我的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。在生产环境中,人们可能会更详细地检查这些回复。