我在装有 CentOS 5 的 VPS 上运行 PHP 5.3.4、Apache 2.0.63 和 APC 3.1.7。
当我打开 apc.php 并转到系统缓存条目选项卡时,它告诉我缓存中唯一的文件是 apc.php。我访问了同一目录中的多个其他文件,但似乎它们仍未被缓存。
我玩过apc_store
和apc_fetch
。我可以从同一个请求存储和获取变量,但不能跨多个请求存储和获取变量。
我搜索了整个网络,但找不到任何能帮助我的东西。当有人声称 APC 3.1.6 中的一个错误导致该问题时,我以为我已经找到了答案。我下载了 3.1.7 并从源代码构建了它...没有任何改善。我仍然遇到同样的问题。我多次重新启动 httpd 服务,但均未成功。
有什么建议可以尝试以及可能出现什么问题?
答案1
您是否在使用 mod_fcgid?如果是,请不要使用。mod_fcgid 不支持 PHP 的子进程生成功能,因此如果有多个请求,它将生成一个新的 PHP,并且 mod_fcgid 生成的每个 PHP 都有自己的操作码缓存(如果您在 PHP 的包装器脚本中启用了它们,还会有一堆无用的子进程)。
如果您正在使用 mod_fastcgi,那么您需要检查 mod_fastcgi 是否仅启动一个 PHP 进程,以及该 PHP 进程是否启动了足够的子进程来处理您的负载。 这篇博文是对整个过程的一个很好的概述,尽管它专门用于使用 suexec 并为每个用户获取单独的 fastcgi 进程,但如果这是您想要的,您需要对其进行调整以便为整个服务器获取一个 fastcgi 进程。
如果您正在使用 mod_php5 那么它应该可以工作,因为 APC 缓存是由 apache 创建的。
如果您使用的 CGI 没有 mod_fastcgi/fcgid,那么您的 PHP 可执行文件会在每次请求后退出,并带走其操作码缓存。