PHP APC 使用 2.7MB RAM 来处理通常使用 16K 的文件

PHP APC 使用 2.7MB RAM 来处理通常使用 16K 的文件

我有一个性能不佳的 PHP 应用程序。我调查了这种情况并确定 APC 缓存会不断填满。我增加了 APC 缓存的大小,这样就不会出现任何缓存已满事件,应用程序的性能也很好。

然而...

我对这个应用程序需要为 apc 留出这么多内存这一事实感到困扰。我还有其他非常相似的应用程序,它们在默认设置为 64M 的情况下运行良好。(我不得不将内存增加到 400M 才能使这个应用程序正常运行)

因此,我使用 apc.php 进行了更深入的研究,发现了一些非常奇怪的事情。两个不同的应用程序都使用相同的共享库,但报告的 apc 缓存内存使用量数字却截然不同……

使用不存在此问题的应用程序

文件名:tessituraLoginEx2.php 大小:16592

并且该应用程序占用了所有额外的 RAM

文件名:tessituraLoginEx2.php 大小:2717488

两个不同的应用程序,都使用相同的共享库,应用程序 A 使用 16k RAM 来存储一个文件,而应用程序 B 使用 2.7MB 来存储完全相同的文件。

谁知道为什么应用程序 A 和 B 对于完全相同的文件会占用如此大不同的大小?

附加信息

我能够通过改变将有问题的文件引入项目的方式来解决这个问题。这两个项目都使用一个框架,调用一个辅助方法,该方法最终从正确的目录中对正确的文件执行 require_once 操作。

我修改了应用程序,使其明确执行 require_once 而不使用框架,臃肿的 apc 内存使用率就消失了。仍然不知道当需求以更复杂/动态的方式发生时,apc 为什么会出现这个问题。幸运的是,我们不再需要围绕 require_once 的复杂逻辑,因此这种解决方法将允许我回到对 apc 的合理内存分配。

需要澄清的是...两个应用程序都使用相同的复杂逻辑来执行 require_once,但只有一个存在膨胀问题。

相关内容