使用MemcachedProfilerStorage时,为什么Symfony2探查器会抛出404?

时间:2015-07-10 13:39:14

标签: php symfony memcached twig profiler

在使用Symfony2探查器时,我很难确定404的原因。我正在使用Symfony 2.3 LTS。

我在开发环境中启用了探查器,并且该问题可在多台开发人员计算机上重现。我们的分析器配置是:

framework:
    profiler:
        dsn: "memcached://localhost:11211"
        enabled: true
        lifetime: 86400 # Keep profiles for a day at most

在某些页面(但不是全部)页面上,我们看到如下错误:

**The page at https://local.dev says:**

An error occurred while loading the web debug toolbar (404: Not Found).

Do you want to open the profiler?

OK / Cancel

https://local.dev/_wdt/<token>有5 404个请求,点击取消会将我们带到https://local.dev/_profiler/<token>

的“未找到令牌”页面

我已经尝试逐步完成代码,到目前为止已经确定:

但是, 此调用之后,原始令牌的telnet请求将返回空。此调用的密钥与原始令牌不同,因此不会被覆盖。

这反过来会触发我遇到客户端的404错误。

一些其他可能有用的信息:

  • 工具栏适用于某些页面。我们的管理界面中的页面有404个工具栏错误。
  • 我们正在使用ESI并使用Twig。
  • 我们正在拨打{% render(controller("ABundle:AController:anAction", {some:params})) %}
  • 从我们的某个Twig模板中删除一个渲染方法可以解决此问题。
  • 恢复该渲染方法并注释掉其他方法也将解决该问题。暗示有太多的孩子或太多的数据(或类似的东西)。

可能导致此问题的原因是什么?我如何识别修复?

顺便说一句,使用FileProfiler工作正常。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

经过多次敲击后我发现了这个解决方案。

似乎由于我们在模板中使用了很多渲染,因此正在收集大量的探查器数据。

此分析器数据正被推送到memcached中。并且,因为有很多,其他数据被驱逐。我通过运行发现了这个:

echo stats | nc 127.0.0.1 11211 | grep evic

每次我加载页面时,都会看到evicted_unfectedevictions爬升。

解决方案是将memcached内存池的大小从标准的64MB增加到256MB(或任何其他大小)。

这是通过在运行时传递-m选项来完成的。