我知道
Linux喜欢吃我的内存,这很好,但它并不能解释我在运行CentOS 6.5的VPS(KVM)上看到的内容.事实上,我在1GB VM上至少缺少200MB.它可能在哪里?
total used free shared buffers cached Mem: 996 907 89 0 76 379 -/+ buffers/cache: 451 545 Swap: 1023 5 1018
free -m表明,如果没有缓冲区/缓存,系统将使用451 MB的内存.但是,正在运行的程序(主要是Nginx / PHP-fpm / MysqLd / sshd)无法添加到那么多RAM.
ps_mem报告程序目前正在使用90MB,这就是smem所说的:
Area Used Cache Noncache firmware/hardware 0 0 0 kernel image 0 0 0 kernel dynamic memory 820912 775204 45708 userspace memory 96300 27988 68312 free memory 103168 103168 0 ---------------------------------------------------------- 1020380 906360 114020
在可见的运行进程之外还有什么东西可以占用我的内存吗?或者是免费的-m错误报告内存使用情况?有关回收此内存的任何提示(无需重新启动)?
cat / proc / meminfo的结果:http://paste.ubuntu.com/6949236/
编辑:原来是一个大的slab缓存,请参阅:http://www.jb51.cc/article/p-aedhdroo-btv.html.我感到困惑的是它比我习惯的要大得多,并且像free -m,htop之类的工具报告这个用作内存而不是比缓存/缓冲区.
解决方法
> free -m是准确的.我不熟悉ps_mem,但怀疑它只报告程序的某些内存使用情况.尝试使用top -a,看看它是否为您提供了更多信息.
>内存可能被程序的“资源”空间使用.重新启动它们会清除其中的一部分,但如果它在一小时内没有回到同一个地方,我会感到惊讶.
>你为什么要“回收”这段记忆.你没有RAM. “免费”内存浪费了内存.你最好使用100%,即使只是为了获得最大的性能提升(这就是为什么Linux使用它来进行缓存).
>另见: Why is Linux reporting “free” memory strangely?
>内存可能被程序的“资源”空间使用.重新启动它们会清除其中的一部分,但如果它在一小时内没有回到同一个地方,我会感到惊讶.
>你为什么要“回收”这段记忆.你没有RAM. “免费”内存浪费了内存.你最好使用100%,即使只是为了获得最大的性能提升(这就是为什么Linux使用它来进行缓存).
>另见: Why is Linux reporting “free” memory strangely?
听起来你对内存利用率的误解与许多人一样.这个Q& A有很好的解释,以及更多信息的链接.但简而言之,除非OOM正在杀死进程,否则让操作系统做到这一点.严肃的,内核程序员为了做到这一点已经投入了大量的时间,除非出现明显的问题,否则我不敢质疑他们的专业知识.