APC - 调整 apc.mmap_file_mask

sa2*_*289 1 php php5 alternative-php-cache

将 APC 配置为 PHP 的操作码缓存时,有一个名为 apc.mmap_file_mask 的配置设置。从我读过的内容来看,您可以通过三种方式对其进行配置,但我并不真正了解每种方式的含义。

  1. /tmp/apc.XXXXXX -(默认)“文件支持的 mmap”
  2. /tmp/apc.shm.XXXXXX - 使用“POSIX 风格的 shm_open/mmap”
  3. /dev/zero - “使用内核的 /dev/zero 接口访问匿名 mmap'ed 内存”

来源:http : //php.net/manual/en/apc.configuration.php#ini.apc.mmap-file-mask

任何人都可以评论这些以及他们会推荐什么吗?我猜会有内存使用和性能方面的影响,也许还有安全方面的影响,但我不知道是不是这样?根据我完成的阅读,我假设 #2 和 #3 更快,但我认为 APC 已经在使用共享内存(由 apc.shm_size 设置),所以我不明白。

小智 5

/tmp/apc.XXXXXX -> 这个 mmap 文件掩码是一个基于普通文件系统的 mmap 并使用 mkstemp 创建一个独特的临时文件,它是 mmap'd。6 个'X's 被唯一的字符串替换以使文件名唯一。这只是将数据写入文件系统中的文件。

/tmp/apc.shm.XXXXXX -> 请注意,在 linux 系统上它_必须_仅是 /apc.shm.XXXXXX。与直接文件支持的 mmap 的不同之处在于这种机制通过 mktemp() 调用创建一个临时文件,并调用 shm_open() 来创建和打开一个新的或打开一个现有的 POSIX 共享内存对象。POSIX 共享内存对象实际上是一个句柄,无关进程可以使用它来映射共享内存的同一区域。我以前没有试过这个,但我认为它至少可以有 3 个“X”(所以 apc.shml.XXX 也应该工作)。

/dev/zero -> mmap'ing/dev/zero是一个匿名内存映射,这意味着它的内存对象没有关联的文件并且所有内容都初始化为零。如果您不指定 mmap_file_mask,APC 将使用匿名映射(带有标志 MAP_SHARED 和 MAP_ANON)。因此,指定/dev/zero和不指定 mmap_file_mask 在两者都是匿名映射的意义上是等效的。从历史上看,在内核版本 2.4 之前,Linux 中的 MAP_SHARED 和 MAP_ANON 是不受支持的。

在性能方面,3 会做得最好,因为文件支持的 mmap'ing 具有更多的磁盘 I/O。因此,3 必须是最快的,因为它没有备份文件并且是实际内存本身的一部分,最后是 2 和 1。然而,这只有跨各种配置的理论和实践基准才能证明现实。但是,匿名映射(和共享内存映射)的缺点是 mmap 的内存在应用程序执行之间不是持久的,因此在重新启动时会丢失缓存。