【发布时间】:2016-09-18 04:52:12
【问题描述】:
所以,我们有一个基于 Laravel 5.1 的项目,我们希望尽快发布,但我们注意到性能不佳,我们正在尝试优化服务器设置。
如标题所示,我们将其部署在 CentOS 6.7 服务器上,使用 Nginx 1.8.1 和 PHP 7 以及 PHP-FPM。由于 CentOS 6.7 的软件库不提供 PHP 7,我们正在使用 IUS 的替换软件包。
我们注意到可能导致性能不佳的一件事是,尽管 Zend Opcache 已启用并正常工作(我们的命中率很高),但似乎并未缓存我们项目中的所有文件。我们使用 opcache-gui 来帮助可视化缓存的内容,虽然许多项目的文件都在那里(包括来自第三方库的文件),但大部分都丢失了,包括我们的主控制器和许多支持类。事实上,当我们禁用 Opcache 时,响应时间几乎保持不变。 opcache 黑名单目前是空的,所以这不是他们没有被包括在内的原因。
我们尝试使用 opcache_compile_file() 强制缓存丢失的文件,虽然文件确实被编译和缓存,但它们从未得到任何命中。
据我了解,Opcache 会缓存所有正在执行的文件,但这似乎不是这里发生的事情。我查看了 opcache 设置,但除了黑名单之外,找不到明显影响这种行为的设置。
我还有什么遗漏的吗? PHP 在决定缓存什么时会依赖其他标准吗?
如有任何帮助,我们将不胜感激!
【问题讨论】:
-
我想我要提到的另一件事,我知道 opcache 能够处理的加速文件的数量是有限制的,可以在 opcache.ini 文件设置中调整 @987654321 @。我们目前将其设置为 8000,这应该足以覆盖我们所有的文件,但是最终只有大约 163 个被缓存。
-
内存消耗似乎也不是问题,因为我们已通过
opcache.memory_consumption分配了 128MB,opcache-gui 显示仅使用了 23.1MB。 -
这个有什么解决办法吗?我也有同样的问题。
-
出于好奇。如果你设置
opcache.validate_timestamps=0会发生什么?