Ubuntu 10.4上的APC配置。 apc.shm_size,apc.shm_segments和Apache的问题

时间:2011-07-16 11:06:56

标签: php performance apache ubuntu apc

我刚刚安装了APC来缓存我的Ubuntu VPS服务器上的PHP代码。使用

sudo apt-get install php-apc
sudo /etc/init.d/apache2 restart

这很好用。但是,我遇到了一些问题,增加了分配给APC的RAM块。如果我运行apc.php,它会向我提供有关共享内存的信息。

Shared Memory   1 Segment(s) with 30.0 MBytes (mmap memory, pthread mutex locking) 

即使我配置了

apc.shm_segments    3

未设置默认

apc.shm_size    30

此外,我遇到的问题是,只要我在apc.shm_size中设置apc.iniphp.ini apache挂起就重启/优雅而不会出现。

我的问题: 1.如果分配给APC的内存为apc.shm_size * apc.shm_segments,为什么我只能看到90M? 2.在设置apc.shm_size时,是否有任何人遇到悬挂Apache的问题?我该如何解决这个问题?

非常感谢!

2 个答案:

答案 0 :(得分:5)

好像我发现了问题

sudo apt-get install php-apc
sudo /etc/init.d/apache2 restart

在我的计算机上安装了旧版APC。在该版本中,必须配置apc.shm_size=30M,而不在内存大小中使用M.因此,新版本的APC使用apc.shm_size=30M旧版本apc.shm_size=30。一旦我做了更改,Apache就会重新启动而不会出现故障。

答案 1 :(得分:4)

您应该检查共享内存的内核最大大小。在类似debian的发行版中它很低(而且ubuntu就像debian一样)。 通过sysctl.conf改变它可以帮助你。获取当前值:

sysctl -a  | grep shmmax

这是字节值。

这可以解释当你设置一个太大的数字时apache崩溃(但你应该在error.log中有一些关于它的东西)。

this response似乎APC并不总是使用apc.shm_segments。我们可以在这里看到一些解释:http://www.php.net/manual/fr/apc.configuration.php#94529

  

如果已将APC配置为使用内存映射文件(使用--enable-mmap选项),则除非通过mmap_file_mask设置指定文件掩码,否则将忽略shm_segments设置。   可以通过为apc.mmap_file_mask配置设置赋值来修复(参见链接)。

但正如本评论所述,使用多个共享段肯定是最糟糕的,因为使用大段。至少有两个大应用程序大量使用大共享内存,并且总是需要更改内核设置,它是 Varnish PostgreSQL 。两者都选择使用大型共享段而不是几个。