当将APC配置为PHP操作码缓存时,有一个名为apc.mmap_file_mask的配置设置。根据我所读到的,有三种方法可以配置它,但我并不真正理解每种方法的含义。
来源:http://php.net/manual/en/apc.configuration.php#ini.apc.mmap-file-mask
有人能对这些和他们的建议发表评论吗?我猜会有内存使用和性能方面的影响,也许还有安全问题,但我不知道是否是这样?从我完成的阅读中,我假设#2和#3更快,但我认为APC已经在使用共享内存了(就像apc.shm_size设置的那样),所以我不明白。
发布于 2015-06-11 19:44:34
/tmp/apc.XXXXXX ->这个mmap文件掩码是一个基于mmap的普通文件系统,它使用mkstemp创建一个唯一的临时文件,这个文件是mmap的。6‘X被唯一的字符串替换,使文件名唯一。这只是将数据写入文件系统中的一个文件。
/tmp/apc.shm.XXXXXX ->注意到it_must_在linux系统上仅为/apc.shm.XXXXXX。与直接文件支持的mmap不同的是,这种机制通过mktemp()调用创建一个临时文件,并调用shm_open()来创建和打开一个新的或者打开一个现有的POSIX共享内存对象。POSIX共享内存对象实际上是一个句柄,不相关的进程可以使用该句柄映射共享内存的同一区域。我以前没有尝试过这种方法,但是我认为它至少可以达到3‘X(所以apc.shml.XXX也应该能工作)。
/dev/零-> mmap‘’ing /dev/zero是一个匿名内存映射,这意味着它的内存对象没有关联的文件,所有的内容都初始化为零。如果不指定mmap_file_mask,APC将使用匿名映射(带有标志MAP_SHARED和MAP_ANON)。因此,指定/dev/zero与不指定mmap_file_mask是等价的,因为它们都是匿名映射。从历史上看,在Linux2.4内核版本之前,MAP_SHARED和MAP_ANON在一起并不支持。
就性能而言,3将是最好的,因为文件支持的mmap‘’ing有相当多的磁盘I/O,所以,3必须是最快的,因为它没有备份文件,并且是实际内存本身的一部分,最后是2和1。然而,这只是理论和实践的基准跨各种配置才能证明的现实。但是,匿名映射(也就是共享内存映射)的缺点是mmap的内存在应用程序执行之间不持久,从而在重启时释放缓存。
https://serverfault.com/questions/695948
复制相似问题