APC共享内存问题

APC共享内存问题

我在 freebsd 服务器上安装了 nginx+php-fpm 和 APC,并且在 php-fpm 与 A​​PC 以某种方式连接时不断遇到问题。php-fpm 在“lockf”状态(在top)下冻结,因此站点无法正常工作。我注意到,将apc.shm_size其降低到默认值 30 可以帮助 php-fpm 不冻结,但是 30Mb 对我来说不够,因为我在 APC 中存储了很多变量。我注意到,将其提升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 并且足够稳定以用于生产?

答案1

关于 mmap:

配置apchas指令的脚本:

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

另外,锁定类型有 3 种:

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

+Default fcntl。你可以尝试spinlocks看看会发生什么

附言:这也应该有用:http://www.php.net/manual/en/apc.setup.php

答案2

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

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

如果有帮助,请将您喜欢的 kern.ipc.shmmax 值设置为/etc/sysctl.conf使更改在重启后继续生效。

答案3

你是如何设置记忆的?

apc.shm_size=64或者apc.shm_size=64M,就像在手动的

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

相关内容