内存使用率非常高,但没有任何进程占用?

内存使用率非常高,但没有任何进程占用?

在我们的一台 Debian 服务器上对 LVM 进行压力测试时,我遇到了这个问题:内存会填满很多,以至于服务器内存不足,但没有进程会认领内存。请参阅https://i.stack.imgur.com/ismcH.png,然后看到https://serverfault.com/a/449102/125894了解 htop 中使用的颜色。

为什么会出现这种情况?
有没有办法查看进程使用内存?
Htop 配置为不隐藏任何进程,那么 htop 缺少什么?

在这个特定情况下,我可以肯定地说,它直接或间接地由 lvmcreate、lvmremove 或 dmsetup 引起,因为我正在对其进行压力测试。请注意,这个问题不是要解决 LVM 问题,而是要解决为什么没有任何进程声明内存。停止所有 LVM 命令确实会使内存回到 <600MB。

输出free -m

             total       used       free     shared    buffers     cached
Mem:         32153      31958        194          0         52       3830
-/+ buffers/cache:      28075       4077
Swap:          975          0        975


由于其较长,其顶部输出位于 pastebin 上:http://pastebin.com/WchrpF7W

答案1

由于您似乎正在运行 I/O 相关的测试(您没有详细解释您对 LVM 卷做了什么),您注意到的行为是否可能与自然 OS 页面缓存有关?

我正在考虑 Linux 的标准行为,即使用(有时几乎全部)可用内存(即未被应用程序保留的内存)来缓存最近访问的磁盘区域,以加快 IO 速度。

当然,活动应用程序优先于此缓存,因此如果某个进程需要更多 RAM,则缓存会动态缩小。

网络上有很多关于 Linux 页面缓存的文档,这里就是其中之一。

答案2

我有同样的问题,但我检查了位于 /proc/sys/vm/ 下的内核参数:overcommit_memory = 默认 0 overcommit_ratio = 默认 50 max_map_count = 默认 65530

就我的情况而言,这个参数就是我的问题的根源nr_hugepages,我有自定义值,但将其更改为默认值

nr_hugepages = 0

有关详细信息,请参阅https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/performance_tuning_guide/s-memory-captun

对不起我的英语不好 :(

答案3

对我来说,这似乎是页面缓存没有自行清除。

sync; echo 1 | sudo tee /proc/sys/vm/drop_caches

几秒钟后就还给我了30gB。

相关内容