2015-07-10 43 views
3

在使用Symfony2探查器时,我努力找出404的原因。我正在使用Symfony 2.3 LTS。为什么Symfony2探查器在使用MemcachedProfilerStorage时抛出404s?

我在我们的开发环境中启用了Profiler,并且该问题可以在多个开发人员机器上再现。我们的探查配置为:

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})) %}
  • 消除从我们的嫩枝一个模板渲染方法一个解决问题。
  • 恢复该渲染方法并注释掉另一个方法也将解决该问题。暗示有太多的孩子或太多的数据(或类似的东西)。

什么可能导致此问题?我将如何识别修补程序?

另外,使用FileProfiler可以正常工作。

谢谢你的帮助!

+0

我猜你已经检查过防火墙/路由yml文件,如果他们配置正确? (404错误可能与'routing_dev.yml'中的缺失/注释路由有关) – tftd

+0

探查器在某些页面上工作,所以路由必须广泛地工作。我进一步更新了这个问题,以包含该片段和一些额外的调查,这些调查表明Twig中的渲染方法对此问题有所贡献。 – edhgoose

回答

2

我已经发现了这个解决方案后,很多头撞。

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

此分析器数据正被推入memcached。而且,由于其中有很多,其他数据正在被驱逐。我通过运行发现这个:

echo stats | nc 127.0.0.1 11211 | grep evic 

每次我加载一个网页,我看到了evicted_unfectedevictions攀登。

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

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

+0

它不会跨越我的想法,这可能是问题...感谢分享! :) – tftd

相关问题