performance - Symfony2 缓慢的初始化时间

标签 performance ubuntu symfony virtualbox

我在 Ubuntu Server 12.04(64 位)VM (VirtualBox) 上运行 Symfony2。主机是MacBook pro。出于某种原因,我在开发模式 (app_dev.php) 中的请求时间非常长。我知道它在开发模式下速度较慢,但​​我说每个请求需要 5-7 秒(有时甚至更慢)。在我的 Mac 上,在开发模式下我得到 200 毫秒左右的请求时间。

在 Symfony2 分析器中查看我的时间线后,我注意到大约 95% 的请求时间是“初始化时间”。这是什么?它可能如此缓慢的原因有哪些?

此问题仅适用于开发模式下的 Symfony2,不适用于我在 VM 上运行的任何其他站点,甚至不适用于生产模式下的 Symfony2。

我看到了这个 (http://stackoverflow.com/questions/11162429/whats-included-in-the-initialization-time-in-the-symfony2-web-profiler),但它似乎没有回答我的问题。

最佳答案

默认情况下,我从 Symfony2 收到 5-30 秒的响应。 现在在开发环境中是 ~500ms

然后我在php.ini中修改了以下内容:

  • 设置realpath_cache_size = 4M(或更多)
  • 完全禁用 XDebug(使用 phpinfo 测试)
  • realpath_cache_ttl=7200
  • 启用并正确设置OPcache(或APC)
  • 重新启动 Apache 以重新加载 php.ini

瞧,在开发模式下响应不到 2 秒!

之前:6779 毫秒 enter image description here

之后: 1587 毫秒

enter image description here

Symfony2 从数千个文件中读取类,这是一个缓慢的过程。使用小型PHP realpath缓存时,如果文件路径不在PHP的realpath缓存中,则每次在dev环境中发出新请求时,都需要逐一解析文件路径。对于 Symfony2,realpath 缓存默认太小。在产品中,这当然不是问题。

缓存元数据:

缓存元数据(例如映射)对于进一步提升性能也非常重要:

doctrine:
    orm:
        entity_managers:
            default:
                metadata_cache_driver: apc
                query_cache_driver: apc
                result_cache_driver: apc

您需要为此启用APCu。它是没有字节码缓存的 APC,因为 OPCache 已经进行了操作码缓存。 OPCache 自 PHP 5.5 起内置。

---- 之后: 467 毫秒----

(在生产环境中,相同的响应是~80 ms)

enter image description here

请注意,这个项目使用了 30 多个 bundle,有数万行代码,近百个自己的服务,所以 0.5s 在本地 Windows 环境上已经相当不错了,只需要一些简单的优化。

关于performance - Symfony2 缓慢的初始化时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12905404/

相关文章:

android - 如何更改 eclipse 的默认背景高亮颜色?附上图片

Symfony2 注册表单 - 使用 jQuery 额外创建的字段不会保留在数据库中,仅来自上次输入的值

php - 服务方法作为 Twig 全局变量

php - 如何向学说实体添加只读属性?

wpf - 我可以在 CompositionTarget.Rendering 中做什么?

python - 如何优化这段代码以进行 nn 预测?

c++ - 确定代码块需要多少个时钟周期

java - 如何在 ubuntu 16.04 上的 hadoop 中设置 JAVA_HOME 变量

c++ - 结合 rand() 和 srand() 以获得更好的性能

c - Unix 套接字示例,编译器找不到 header