我刚刚安装了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.ini
或php.ini
apache挂起就重启/优雅而不会出现。
我的问题:
1.如果分配给APC的内存为apc.shm_size * apc.shm_segments
,为什么我只能看到90M?
2.在设置apc.shm_size
时,是否有任何人遇到悬挂Apache的问题?我该如何解决这个问题?
非常感谢!
答案 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 。两者都选择使用大型共享段而不是几个。