PHP APC与Linux“免费”解读

PHP APC与Linux“免费”解读

我对 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

相关内容