2012-11-19 99 views
6

我对Symfony2防火墙组件在某些请求上花费时间有问题。我注意到它主要发生在AJAX请求期间,并且非常具体 - 当我在教义中使用LIKE%..%语句搜索一个实体时(不确定它是否重要,但这就是我注意到的));});}}}}}} 。Symfony2防火墙需要年龄

稍后调用相同的URL(1或2秒后)会导致“正常”的防火墙处理时间。

我没有使用任何外部数据源进行身份验证,所有内容都存储在PostgreSQL中。

请看下面的时间表:

timeline http://f.cl.ly/items/1a2Y0T062E0H2Z3t0g27/Zrzut%20ekranu%202012-11-19%20o%2018.26.11.png

有没有办法直接调试防火墙?

我的配置是这样的:

security: 
firewalls: 
    admin_area: 
     provider: db_users 
     pattern: ^/admin 
     anonymous: ~ 
     form_login: 
      login_path: /admin/login 
      check_path: /admin/login-check 
     logout: 
      path: /admin/logout 
      target: /admin 
     switch_user: { role: ROLE_SUPERADMIN, parameter: _become_user } 

    secured_area: 
     pattern: ~ 
     anonymous: ~ 
     http_basic: 
      realm: "Secured Demo Area" 

access_control: 
    - { path: ^/admin/clip-manager/clip/encode/*, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 } 
    - { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin/login-check, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin, roles: [ROLE_ADMIN_LOGIN, ADMIN_AREA] } 

providers: 
    db_users: 
     entity: { class: Webility\Bundle\AppUserBundle\Entity\User, property: username } 

encoders: 
    Webility\Bundle\AppUserBundle\Entity\User: 
     algorithm:   sha256 
     iterations:   3 
     encode_as_base64: false 

acl: 
    connection: default 

我使用Symfony\SecurityBundleJMSSecurityExtraBundle

+2

尝试使用数据库服务器的实际IP地址(而不是主机名)。 http://12wiki.blogspot.com.es/2012/11/why-does-symfony-2-firewall-take-so.html – Cerad

+1

有没有很多AJAX请求在同一时间处理?它是唯一的吗? – AlterPHP

+0

是的,这是唯一的一个。虽然...这是一个实时搜索,即。搜索用户类型(当用户停止输入时延迟100ms),并且任何以前的AJAX请求都会中止。但确实可能会中止请求,但仍然由服务器处理。 –

回答

1

这是非常不寻常的行为(除非你正在做某件事,那么......不寻常;)。

尝试使用其中一个PHP分析器来查看发生了什么。我可以推荐XHProfXHProf GUI。这很容易设置和使用。

我只是猜测,但问题可能与您提到的数据库查询有关。检查查询中使用的字段是否设置了适当的索引。

编辑:我无心本文从Symfony的博客链接上:http://12wiki.blogspot.com.es/2012/11/why-does-symfony-2-firewall-take-so.html

这似乎是一个DNS问题。

+0

是的,我发现之前的文章,但不幸的是它不是我的解决方案:( –

+0

在这种情况下,开始分析;) –

3

我有同样的问题,想与大家分享解决方案。

Server Response Time increase

问题引起的,Symfony的\元器件\安全\ HTTP \防火墙〜107406毫秒

Application Timeline

溶液;

在我们的情况下,问题是我们在php.ini文件上使用的会话处理程序。

上一个配置;

session.save_handler = files 

新配置;

;session.save_handler = files 

session.save_handler = memcached 
session.save_path = "127.0.0.1:11212" 

我将会话处理程序更改为memcached。在我已经使用memcached的时候,我需要memcached的第二个实例,或者在我实现memcached监听的附加端口时解决了这个问题;

要运行memcached来听两个端口,我编辑memcached.conf

以前的配置;

-p 11211 
-l 127.0.0.1 

新配置

#-p 11211 
#-l 127.0.0.1 

-l 127.0.0.1:11211 
-l 127.0.0.1:11212 

,只是重新启动memcached的情况下,分布式缓存开始监听同一个实例两个端口。

service memcached restart 

要验证memcached侦听并响应新端口,您可以运行telnet命令;

telnet 127.0.0.1 11211 
telnet 127.0.0.1 11212 

预计产量是;

Trying 127.0.0.1... 
Connected to 127.0.0.1. 
Escape character is '^]'. 

结果是非常快的应用程序;

Final Application Timeline

我希望这个解决方案将帮助你。