使用apc操作码缓存重新加载apache后“调用未定义的方法”

时间:2014-11-24 12:38:38

标签: php apache caching apc

我们正在使用php5.4,apc 3.1.13与apache2和mod_php并且偶尔会出现apc操作码缓存似乎在apache重新加载后忘记缓存数据的问题(例如在logrotate之后)。这有时导致致命错误"调用未定义的方法"。我们不会在错误发生之前以任何方式更改文件,并且在apache重启后问题就消失了。

当我们发布新版本的代码时,我们在文件系统中有我们应用程序的下一个和当前版本,并通过取消链接当前和符号链接新版本来切换它们。我认为这种方式apc会将新的操作码(从文件系统中的不同位置)添加到缓存中,而不会删除旧的操作码。

在对测试系统进行一些测试之后,我可以看到apc在apache重新加载和apache重启后清除了缓存。 "调用未定义的方法"问题在某种程度上听起来像碎片错误,但我真的不明白这一点,因为缓存应该是空的,因为重新加载。我发现了一些关于旧版apc版本中的错误的信息,应该在几年后修复。

我很难猜到apc重新加载和applucation释放后apc以如此腐败的缓存结束,因为我没有看到模式。但它确实与apache重新加载有关。

这是我们的apc.ini:

apc.enabled=1
apc.shm_size=512M
apc.num_files_hint=10000
apc.user_entries_hint=10000
apc.max_file_size=5M
apc.stat=1
apc.optimization=0
apc.shm_segments=1
apc.enable_cli=0
apc.cache_by_default=1
apc.include_once_override=0

我可以看到系统(debian)共享内存最大值设置为32mb。

0 个答案:

没有答案