linux – 如果它不在缓存/缓冲区中或由进程使用,那么我的RAM在哪里?

前端之家收集整理的这篇文章主要介绍了linux – 如果它不在缓存/缓冲区中或由进程使用,那么我的RAM在哪里?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道 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?

听起来你对内存利用率的误解与许多人一样.这个Q& A有很好的解释,以及更多信息的链接.但简而言之,除非OOM正在杀死进程,否则让操作系统做到这一点.严肃的,内核程序员为了做到这一点已经投入了大量的时间,除非出现明显的问题,否则我不敢质疑他们的专业知识.

猜你在找的Linux相关文章