我有一个性能不佳的 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,但只有一个存在膨胀问题。