我想在共享环境中使用APC,但是主要的问题当然是操作码共享。
为了克服这个问题,我考虑过为每个用户使用不同的apc.mmap_file_mask(它们是通过php-fpm连接的),所以APC创build的“文件”将不会被共享,但对用户来说是个人的。
当然,我注意到我错误的原因是多方面的,最大的一个是关于“apc.mmap_file_mask实际上做了什么?”:我认为它就像一个指向APC使用的内存区域的指针,但我不太确定。
当然,在我使用的path(/tmp/apc.XXXXXX)中没有文件:机器的/ tmp中没有文件,并且chrooted环境(/ home / vhosts / 0001 / tmp)中没有文件。
那么,真正做apc.mmap_file_mask的是什么?
我的实际configuration是:
apc.mmap_file_mask = /tmp/apc.XXXXXX apc.num_files_hint = 2048 apc.max_file_size = 10M apc.ttl = 7200
我已经检查了与phpinfo()发生了什么,它并没有翻译的价值:它仍然给我/tmp/apc.XXXXXX (但apc.php说caching被击中,我有更好的时间价值…因此它正在工作)。
你有没有在主动的Web服务器上试过APC.php? 如果你正在使用SHM而不是MMAP,可以解释这一点。 filemask只是允许它保存的ap文件随机数字按照您的规范到一个特定的位置。 你甚至可以发送到/ dev /零在这里的博客文章http://www.nigeldunn.com/2011/05/02/unable-to-allocate-memory-pool/
这里是解释各种内存/文件位置https://stackoverflow.com/questions/904581/shmem-vs-tmpfs-vs-mmap
我不是完全肯定我的答案,但是您使用SHM是合理的,因此mmap掩码的参数可能不适用。
尝试这个以及在您的APC.php之后
ls /dev/shm
万一它对任何人都有用,文件几乎立即被删除,这就是为什么你不能通过ls看到它们(除非你恰好在右边运行ls)。 如果您希望在apc.mmap_file_mask指定的目录中查看由APC创build和删除的文件,则可以使用inotify-tools来监视该目录中的文件系统活动。
只需安装它并切换到apc.mmap_file_mask目录并运行以下命令。 如果其他进程使用该目录作为其他事情(例如/ tmp),则可以将输出传递给grep,并查找与您的mmap_file_mask设置相匹配的文件名的一部分,如“apc”。
/usr/bin/inotifywait -mr -e attrib,create,delete,modify,move --format '|%w/%f| %e %T' --timefmt '%Y-%m-%d-%H-%M-%S' . #example output: Setting up watches. Beware: since -r was given, this may take a while! Watches established. |.//apc.wi3mjq| CREATE 2014-07-09-20-59-01 |.//apc.wi3mjq| MODIFY 2014-07-09-20-59-01 |.//apc.wi3mjq| DELETE 2014-07-09-20-59-01 |.//apc.EQs3Up| CREATE 2014-07-09-20-59-01 |.//apc.EQs3Up| MODIFY 2014-07-09-20-59-01 |.//apc.EQs3Up| DELETE 2014-07-09-20-59-01 |.//apc.IpNU5o| CREATE 2014-07-09-20-59-01 |.//apc.IpNU5o| MODIFY 2014-07-09-20-59-01 |.//apc.QnNU5o| CREATE 2014-07-09-20-59-01 |.//apc.QnNU5o| MODIFY 2014-07-09-20-59-01 |.//apc.QnNU5o| DELETE 2014-07-09-20-59-01
另外,这个技巧也适用于在MySQL的tmpdir中看到临时表的活动。