为什么'top'表示内存使用率低,'free'表示内存使用率高?

为什么'top'表示内存使用率低,'free'表示内存使用率高?

Mem: 262144k total, 225708k used, 36436k free, 47948k buffers Swap: 262136k total, 40k used, 262096k free, 110704k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1652 root 15 0 79456 14m 1728 S 0.0 5.6 0:00.02 miniserv.pl 3544 root 15 0 87920 3356 2584 R 0.0 1.3 0:00.01 sshd 3707 root 16 0 86704 3104 2416 S 0.0 1.2 0:00.00 sshd 3708 sshd 15 0 61864 1452 872 S 0.0 0.6 0:00.00 sshd 3548 root 16 0 10872 1432 1116 S 0.0 0.5 0:00.00 bash 1908 root 15 0 10876 1392 1072 S 0.0 0.5 0:00.00 sh 918 root 15 0 60520 1204 664 S 0.0 0.5 0:00.07 sshd 3624 root 15 0 12584 1180 920 R 0.0 0.5 0:00.00 top 926 root 18 0 19672 1152 576 S 0.0 0.4 0:00.00 crond 1 root 15 0 10324 704 588 S 0.0 0.3 0:00.02 init 311 root 16 -4 12580 704 388 S 0.0 0.3 0:00.06 udevd 874 root 16 0 5884 592 472 S 0.0 0.2 0:00.06 syslogd 877 root 18 0 3780 420 336 S 0.0 0.2 0:00.00 klogd 

总MEM使用率= 12.1%

然而,226mb使用了262mb,36mb免费 – 即86.25%使用。

即使考虑到交换,总内存262mb * 2 = 524mb。 如果使用226mb,则使用43.12%。 两者都比上面列出的实际加工高得多。

该服务器是运行CentOS 5.2的全新256MB VPS – 尚未安装任何内容。 运行webadmin; 即没有Plesk。

这个问题基本上是关于顶层给出的冲突信息。 但我也想知道,如果这种内存使用情况是正常的,对于没有运行任何特别的内存密集型应用程序的服务器。 我打算安装Apache / Ruby EE / Passenger; 但是,如果内存使用已经很高,我不确定它将如何处理它。

最上面的是%MEM列中的数字,它是计算机器或VPS中的RSS内存量(Resident Segment Size,基本上物理内存中有真实数据的页面)的数量。

另一方面,free就是这样计算的,没有数据的物理内存页的数量,还没有被分配到缓冲区,caching或者内核。 在类Unix操作系统中,操作系统通过使用磁盘caching的空闲页面尽力保持尽可能低的数量。 只有在机器启动之后,或者如果退出本身消耗大量物理内存的程序,唯一可能的情况是可用内存的高值。

这个内存使用是否正常? 简短的答案是肯定的。 Unix程序通常会分配(即要求操作系统)比他们使用的更多的内存。 如果您查看VSS列,列出的进程总数超过463mb。 那是因为

  • glibc说,对每个进程的大量内存映射到同一个库
  • 操作系统通常将内存过度分配给应用程序,因为大多数应用程序永远不会收集他们所要求的内容。

找出进程内存使用率是一门艺术而不是科学恕我直言,请参阅http://lwn.net上的讨论。 我的build议是密切关注iostat -xm并确保您的机器不会大量交换。

除了Dave Cheney的回答:

总内存使用减缓冲区和caching(159M)为〜67M和67 / 524M〜12%。 由于运行进程需要更多的内存,系统将自动清除旧的caching并分配。

如果您运行免费,您将会了解运行进程以及实际可用内存的实际使用量。

 $ free -m total used free shared buffers cached Mem: 247 218 29 0 46 96 -/+ buffers/cache: 74 172 Swap: 556 0 556 

您感兴趣的行是 – / + buffers / cache

你可能会发现,并不是你的机器上运行的所有进程 – 只是按内存使用情况sorting的前13个。

如果你运行“ps”,你会看到所有正在运行的进程,Ubuntu安装的这个进程是109。