APC共享内存问题

我有一个freebsd服务器上安装了nginx + php-fpm和APC,我遇到了与APC连接不断的问题。 php-fpm冻结在'lockf'状态(在top ),因此网站不工作。 我注意到,通过降低apc.shm_size到默认值30是帮助php-fpm不冻结,但30Mb是不够的,因为我在APC存储了很多variables。 我注意到,提高apc.shm_size为更高的值(如60)使得php-fpm进程使用更多的内存,几乎所有的服务器物理内存,这是奇怪的,因为据我所知,这些60Mb是所有的PHP-FPM之间共享进程,不应该影响每个php-fpm进程的内存使用。 我试图将apc.shm_segments值更改为1以上,并重新启动php-fpm时出现错误:

 PHP Startup: apc.shm_segments setting ignored in MMAP mode in <b>Unknown</b> on line <b>0</b><br /> Unknown(0) : Warning - PHP Startup: apc.shm_segments setting ignored in MMAP mode 

所以请告诉我这些参数如何影响APC,为什么在使用大量共享内存时,php-fpm会死亡? MMAP mode是什么意思? 我想打开xcache,它是与PHP-FPM和足够稳定的生产?

关于mmap:

configurationapc脚本有指令:

  --disable-apc-mmap Disable mmap support and use IPC shm instead 

还有3种types的locking:

  --enable-apc-sem Enable semaphore locks instead of fcntl --enable-apc-spinlocks Enable spin locks EXPERIMENTAL 

+默认fcntl 。 你可以尝试spinlocks ,看看会发生什么

PS。 这应该也是有用的: http : //www.php.net/manual/en/apc.setup.php

如果你没有增加sysctl值kern.ipc.shmmax你需要这样做。 默认情况下,它是32 MB,至less在我的FreeBSD 8.0和许多Linux发行版中也是如此。

尝试sysctl -w kern.ipc.shmmax=134217728将值增加到128兆字节。 然后尝试再次增加apc.shm_size超过30 MB。

如果有帮助的话,把你喜欢的kern.ipc.shmmax值放到/etc/sysctl.conf文件中 ,让这个改变在重启之间保持不变。

你是如何设定记忆的?

apc.shm_size=64apc.shm_size=64M ,因为它在手册中 ?

后者解决了我的类似问题。