将APCconfiguration为PHP的操作码caching时,会有一个名为apc.mmap_file_mask的configuration设置。 从我读到的有三种方法可以configuration它,但我并不真正了解每个的含义。
资料来源: http : //php.net/manual/en/apc.configuration.php#ini.apc.mmap-file-mask
任何人都可以评论这些,他们会推荐什么? 我猜测会有内存使用情况和性能影响,也许还有安全性,但是我不知道是不是这种情况? 从阅读我完成我假设#2和#3更快,但我认为APC已经使用共享内存,因为它(由apc.shm_size设置),所以我不明白。
/tmp/apc.XXXXXX – >这个mmap文件掩码是一个基于mmap的普通文件系统,使用mkstemp来创build一个mmap的唯一临时文件。 6'X被replace为唯一string以使文件名唯一。 这只是将数据写入文件系统中的文件。
/tmp/apc.shm.XXXXXX – >请注意,在Linux系统上it_must_只能是/apc.shm.XXXXXX。 与直接文件支持的mmap的不同之处在于,这种机制通过mktemp()调用创build一个临时文件,并调用shm_open()来创build并打开一个新的或打开一个现有的POSIX共享内存对象。 一个POSIX共享内存对象实际上是一个句柄,可以被不相关的进程用来映射共享内存的相同区域。 我没有尝试过,但我认为它可以有至less3'X的(所以apc.shml.XXX也应该工作)。
/ dev / zero – > mmap'ing /dev/zero是一个匿名的内存映射,这意味着它的内存对象没有关联的文件,所有的内容都被初始化为零。 如果您不指定mmap_file_mask,则APC将使用匿名映射(标记为MAP_SHARED和MAP_ANON)。 因此,指定/dev/zero和不指定mmap_file_mask是等价的,因为它们都是匿名映射。 历史上,在Linux内核版本2.4之前,Linux中的MAP_SHARED和MAP_ANON一起没有支持。
性能方面,3将做最好的,因为文件支持mmap'ing有更多的磁盘I / O。 因此,3必须是最快的,因为它没有备份文件,是实际内存本身的一部分,然后是2和1。 但是,这只是各种configuration的理论和实际基准可以certificate的事实。 然而,匿名映射(&共享内存映射)的缺点是,mmap内存在应用程序执行之间不是持续的,因此在重新启动时丢失caching。