我的 Linux 机器上的所有内存都到哪里去了?

我的 Linux 机器上的所有内存都到哪里去了?

我在一台 16GB 的机器上运行 Amazon Linux。我有两个 Java 进程,每个进程的最大内存为 2GB。一个进程在启动时占用 2GB,另一个进程可以增长到 2GB。其他进程似乎根本不会消耗太多内存。但是,我的大部分内存都是从 top 开始消耗的:

 Mem:  16426080k total, 13986456k used,  2439624k free,   316888k buffers

输出ps aux

应用程序 1 30213 6.2 40.3 16615384 6632692 ? 同步 14:54 5:28 应用程序 2 30469 10.5 9.6 5847412 1589996 ? 同步 14:54 9:12

我似乎无法弄清楚我的内存都到哪里去了。最多我的 2 个主进程总共使用了 4GB,那么其他 12GB 在哪里呢?操作系统会占用所有内存,这似乎有点过分。我该如何释放更多内存?

答案1

正如 Denis 提到的那样,Linux 会尝试使用所有可用的内存,而不是让内存闲置。因此,它所做的一件大事就是将文件缓存到内存中。这有助于加快读取速度,并且根据您使用的工具,它可能会混淆您所看到的内容。

我现在附近没有 Amazon Linux 机箱,但我认为你遗漏了一些细节。

这是我的 openSuSE 盒子的免费输出:

              total        used        free      shared  buff/cache   available
Mem:       32800876     6833072    14617720      717928    11350084    24946896
Swap:      16777212           0    16777212

因此,我的系统中有 32G 内存,其中几乎 7G 已使用,还有超过 14G 的“空闲”空间。但是,如果您在末尾看到 buff/cache,则实际上这些空间也可用于程序。Linux 会将该缓存中的空间分配给程序。此外,根据当天的感觉(是的,这有一个算法),即使您有空闲内存,它也可能将某些空间移至 SWAP。

因此,如果您的缓存也非常小,我才会真正担心。这表明您没有使用系统上的 FS 缓存,并且确实有一些“神秘”的东西占用了内存。如果是这样,则需要进一步研究顶部输出。

答案2

Linux 操作系统通常会利用几乎所有的 RAM,但实际上并没有主动使用它们,因此它的工作效率更高。因此,如果您的应用程序没有因为交换而变慢(您很可能没有这种情况),则无需担心。只有当可用内存降至 300-500k 以下时,您才可能使用很大一部分,这时最好添加内存或停止某些应用程序

相关内容