apc apc.shm_segments忽略apc.shm_size在apache2中performance怪异

这是目前的apc.ini

extension=apc.so apc.enabled=1 apc.ttl=86400 apc.user_ttl=86400 apc.shm_segments=1 apc.shm_size=64 

这给了我

 1 Segment(s) with 64.0 MBytes (mmap memory, pthread mutex locking) 

有趣的是,根据这个只有32M应该是可能的..

 cat /proc/sys/kernel/shmmax 33554432 

如果我增加段,它只是没有效果,但在apc.php中可见,如果我提高shm_size高于64(不pipe段的设置)我得到以下错误:

 [apc-error] apc_mmap: mmap failed: No space left on device 

我需要大约90M的opcache,所以从我的理解给予shmmax设置我会去2x32M段…

任何人都可以想到为什么多个部分不会工作的原因? 任何想法为什么64M工作尽pipeshmmax限制是32M?

 APC Version 3.0.19 PHP Version 5.2.0-8+etch16 

和系统(lenny)…

 uname -a Linux vs210044.vserver.de 2.6.9-023stab052.4-smp #1 SMP Tue May 11 19:21:39 MSD 2010 x86_64 GNU/Linux 

是的,我知道它过时了,没有得到升级的机会,它有点复杂…

看起来像APC的一些版本(在我的情况下是3.0.14)似乎忽略apc.shm_segments的值,并与apc.shm_size一起使用,并且它接受大于每个段的最大允许大小的值。 就像你的情况一样。 当你分配更多的32M的Apache应挂起来,至less它在我的情况。

为什么不把/etc/sysctl.conf中的shmmax大小增加到90M? 它解决了我的问题

我遇到过同样的问题。 您需要以64M格式定义内存,而不是数值(请参阅手册中的默认值):

 apc.shm_size=64M 

从/etc/php5/apache2/conf.d中删除未使用的库。 可能你不需要pdo.ini和pdo_mysq.ini或mysqli.ini这将节省几兆的Ram

你用mmap的apc吗? 那么你不能使用多个部分。

/ proc / sys / kernel / shmmax的32M是debian默认的。 你可以用下面的方法来提高

 1) file: /etc/sysctl.conf 2) value: kernel.shmmax=134217728 3) save for reboots: sysctl -p 

如果系统是虚拟化的 – 你也应该检查openvz,vmware等的限制。

如果您不提高系统限制 – apc用尽空间:[apc-error] apc_mmap:mmap失败:设备上没有剩余空间

我希望这有帮助 – 我已经看到了很多与互联网有相同问题的线程。