Symfony2 应用程序总是在 kernel.request 和 kernel.controller 之间等待 3 秒

Symfony2 app always has a 3 second wait between kernel.request and kernel.controller

我正在尝试在 docker 容器中构建此 symfony2 应用程序 PHP7 并在 nginx 中使用 FastCGI PM。

每次应用程序执行时,我都会在 kernel.request 和 kernel.controller 之间得到这个神秘的 3 秒无法解释的执行时间。

您可以在此屏幕截图中看到奇怪的请求时间轴:

当我 运行 在我的 vagrant 机器上使用典型的 php5.5+apache2 配置时,这个应用程序没有这种行为,所以我不确定它是否与我的有关PHP 配置或 PHP7,但我想知道是否有人以前见过类似的东西并且知道这里会发生什么?

在此处编辑 docker_compose 配置:

cafe:
  build: /opt/cafe
  ports: 
      - "9981:80"
  environment: 
      - "CAFE_CACHE_DIR=/tmp/cafe/cache"
      - "CAFE_LOG_DIR=/var/log/cafe"
      - "SF_ENV=local"
  volumes: 
      - /var/log/php7:/var/log/php7
      - /var/log/nginx:/var/log/nginx

这是因为Symfony的vendor目录。它需要太多的IO操作。 VirtualBox 同步文件夹的性能非常非常慢 the benchmark

您可以将 vendor 目录移动到同步文件夹之外。就像我下面的方式:
这是My question

但是,最后,我没有最好的解决方案。所以,我现在已经转移到 纯 linux 环境来编写我的代码。

如果有人好奇,或者有同样的问题,我终于找到了问题,这不是我所期望的。当我为 PHP7 设置这个项目时,我无法使用我通常拥有的标准 linux 发行版,我必须自己添加所有配置文件。

经过艰苦的分析我的代码后,我发现停滞的确切行是我在 运行 get_browser() (http://php.net/manual/en/function.get-browser.php) kernel.controller听众。 get_browser() 由于我在容器中设置 php 配置时使用的 browscap.ini 文件而出现性能问题。我想,出于某种原因,我使用的 browscap.ini 文件存在解析问题或其他问题。我用 lite_php_browscap.ini 版本更改了它,现在它运行得非常非常快,没有问题。

最近也在忙着盒子里的Symfony性能。以下最近的文章是我能找到的最好的回顾:

http://by-examples.net/2014/12/09/symfony2-on-vagrant.html