我最近在我们的 PHP 服务器上看到了一些奇怪的行为。
我们将 PHP-FPM 5.3.8 与 APC 3.1.9 一起使用。apc.stat 标志被关闭,因此文件应该只从硬盘读取一次,然后缓存在内存中。在每次部署中,我们只需清除 APC。
我们的代码使用 symfony 框架,一旦代码第一次执行,它就会在 /cache 文件夹中生成 PHP 文件。从那时起,它应该读取 /cache 中的这些 PHP 文件以更快地执行。
我们的问题是有时 PHP 告诉我们 /cache 中的某些文件不存在,但是当我手动检查时,我发现这些文件存在。
我的怀疑是,在每次部署后的第一个请求期间,关闭 apc.stat 的 APC 缓存这些文件不存在,然后记住这些文件不存在而不是再次检查。实际上它们在第二个请求时确实存在,因为第一个请求生成了它们,只是在第一个请求时它们不存在。
关闭 apc.stat 的 APC 是否有可能表现得那样?它不仅缓存现有文件,还缓存哪些文件不存在?