APC 持续冲洗

APC 持续冲洗

在这里查看我的 APC:http://www.animefushigi.com/apc.php

如果您不断点击左上角的“刷新”按钮,请观察“点击次数”以及“开始时间”和“正常运行时间”值。它们全都在上下波动。

我觉得这很奇怪,通常这 3 个值只会随着时间的推移而变高,而不是下降(除了开始时间 - 它应该保持不变)

我唯一的假设是缓存每秒都会被刷新一次。

我四处搜索并尝试了一些方法来解决这个问题

  • 已禁用 suEXEC
  • 设置 apc.mmap_file_mask /dev/zero
  • 尝试过 PHP 5 Handler fcgi 和 cgi

另外,当我通过 ssh 进入 /tmp/ 时,-ls 我没有看到任何与 apc 相关的内容。

有什么建议 ?

服务器是 Linux,使用 whm/cpanel

*编辑:我怀疑问题可能是由于 apc.mmap_file_mask 造成的。目前设置为/tmp/apc-animefus.XXXXXX,但在 apc.php 页面上,似乎每次刷新时 xxxxxx 都会被替换为其他内容

答案1

关于 APC 和不同模式

  • APC 的缓存本质上是每个进程的。
  • 如果您使用 CGI,则会创建进程,APC 创建其缓存,然后进程结束并清除缓存。(据我所知,suPHP 似乎类似于 CGI)。
  • 如果您使用 FastCGI,Apache 会为每个同时发出的请求生成一个进程。它会保留这些进程以备再次使用。每个进程都有自己的 APC 缓存。
  • 如果您使用 mod_php 处理程序,它会在所有 apache 进程之间共享缓存,但不会以用户身份运行它。

观察结果:

  • 每次刷新页面时缓存都不会重置,我看到几个被重复使用的缓存已经是五分钟前了。任何服务器的重新配置都会重置它。
  • 知道您获得相同的 FastCGI 进程的唯一方法是成为唯一的客户端。
  • 您的网站上可能有非常多的请求,因此有多个 FastCGI 进程正在使用中。

应该真实的事情:

  • 在 CGI 或 SUPHP 模式下,值永远不会上升。
  • 在 fcgid 模式下,值会上升和下降。
  • 在 mod_php/DSO 模式下,这些值是正确的。

我要检查的事项(无特定顺序):

  • 观察您用户下的 PHP 进程(使用 top 或类似方法)。查看它们通常运行多长时间以及是否退出。
  • 检查日志文件以查看有多少请求正在访问 PHP。
  • 创建一个脚本来检查脚本运行时的进程 ID,如果您愿意,可以将它们写入数据库/文件,以便轻松跟踪它们。继续加载此页面以收集有关进程运行时间的信息。
  • 检查 FastCGI 配置,我不确定 cPanel 默认如何配置它,因为当我尝试它时,它总是在某些网站上出现一些问题。有几个选项可以控制进程应保持多长时间。在 FastCGI 模式下,PHP 默认会在 500 个请求后退出。这是有目的的,因为有人报告说 PHP 在运行很长时间后会泄漏内存。如果您的网站点击量很大,您可能需要增加此数字。

相关内容