我对 free 输出的理解是缓冲区/缓存值是可用内存的真实反映。
我已经为 PHP APC 操作码缓存分配了 512M,尽管它正在利用所有这些,但 free 的输出保持不变。
我知道问题在于我对内存管理的理解(或缺乏理解)。有人能给我一些见解吗?
更新:
我对内存的理解来自于我对汇编的学习。我不知道(至少我认为)Linux 内核如何管理内存。
自从发布问题以来,我阅读了更多内容,我的理解是,在最简单的层面上,它们就像它们的名字所暗示的那样 - 缓存是内核将文件镜像到 RAM 以便更快地访问,而缓冲区是各个进程正在使用的瞬时信息位。
APC 正在运行(512M 已充分利用):
total used free shared buffers cached
Mem: 1498 1452 46 0 36 796
-/+ buffers/cache: 619 879
禁用 APC 并重新启动 PHP FPM 后立即执行:
total used free shared buffers cached
Mem: 1498 776 721 0 36 285
-/+ buffers/cache: 454 1043
忽略交换空间,因为它保持不变:
第一行对我来说是有意义的,内存从 APC(512M)和 PHP 工作程序(721-46-512 = 163M)中释放。分配给缓存的内存不再需要 APC 处理,因此减少了 796-285 = ~512M(或者这只是巧合?)。
第二行让我感到困惑。这些数字是否只是内核为缓冲区保留的量,其余的分配给缓存,即使当前没有实际使用?这是有道理的,因为它下降了与我计算的 PHP 使用量相同的量,反映了 PHP 工作者。
如果我是对的,那么另一个问题就出现了。第一行的“缓冲区”反映了什么?
答案1
total used free shared buffers cached
Mem: 1498 776 721 0 36 285
-/+ buffers/cache: 454 1043
第二行,454 = used(776) - (buffers(36)+cached(285))
1043 = 空闲(721) + (缓冲区(36) + 缓存(285))
该值将是近似值。
缓冲区是什么?
https://stackoverflow.com/questions/6345020/linux-memory-buffer-vs-cache