![APC 持续冲洗](https://linux22.com/image/574589/APC%20%E6%8C%81%E7%BB%AD%E5%86%B2%E6%B4%97.png)
在这里查看我的 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 在运行很长时间后会泄漏内存。如果您的网站点击量很大,您可能需要增加此数字。