当我在 Red Hat 7.2 机器上使用“top”命令时,它告诉我 4.0 GB 的 RAM 中大约有 3.9 GB 正在使用中,还有大约 135MB 的可用空间。
但是,当我使用“ps”命令列出所有进程及其内存利用率时,列表总共只有约 650MB。
这是预期的行为吗?还是有什么事情值得关注?我读到 Linux 将使用可用 RAM 来缓存磁盘中常用的文件,这是否可以解释“缺失”的 RAM 利用率?
谢谢!
IVR Avenger
答案1
你的猜测很可能是正确的。
top 给出的“可用内存”数字不包括用于文件系统缓存或缓冲区的内存。分配给文件系统缓存的内存是空闲的,因为如果某个进程需要其中的一部分内存,可以轻松将其释放,但 top 不会向您显示这一点。
free -m
将让您更好地了解您的进程在“-/+ buffers/cache”行上实际使用了多少内存(以 MB 为单位)。
当然,它仍然可能与您基于 ps 的输出的计算结果不完全相等,因为在 Linux 中计算内存使用情况很棘手,尤其是在共享内存方面。
在下面的例子中,作为可用内存的视图,1287MB 比 31MB 更为准确。
$ free -m
total used free shared buffers cached
Mem: 2002 1970 31 0 48 1207
-/+ buffers/cache: 714 1287
Swap: 1027 3 1023
答案2
top 经常存在过度报告共享内存的问题;这种现象的一个完美例子就是 Java 应用服务器或 apache。