Symfony2防火墙需要很长时间

Mic*_*dek 6 php symfony

我有一个问题Symfony2防火墙组件在一些请求上花了很多年.

我注意到,它在AJAX请求,和非常具体的人主要发生 - 当我使用像学说%..%语句搜索一个实体(不知道它的问题,但是这就是我注意到;)).

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

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

请查看以下时间表:

时间表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
Run Code Online (Sandbox Code Playgroud)

我正在使用Symfony\SecurityBundleJMSSecurityExtraBundle.

小智 5

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

服务器响应时间增加

由 Symfony\Component\Security\Http\Firewall 引起的问题 ~ 107406 ms

申请时间表

解决方案;

在我们的例子中,问题是我们在 php.ini 文件上使用的会话处理程序。

以前的配置;

session.save_handler = files
Run Code Online (Sandbox Code Playgroud)

新配置;

;session.save_handler = files

session.save_handler = memcached
session.save_path = "127.0.0.1:11212"
Run Code Online (Sandbox Code Playgroud)

我将会话处理程序更改为 memcached。因为我已经在使用 memcached,所以我需要第二个 memcached 实例,或者当我实现了 memcached 侦听的额外端口时解决了这个问题;

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

以前的配置;

-p 11211
-l 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

新配置

#-p 11211
#-l 127.0.0.1

-l 127.0.0.1:11211
-l 127.0.0.1:11212
Run Code Online (Sandbox Code Playgroud)

并且刚刚重新启动 memcached 实例,memcached 开始侦听同一个实例上的两个端口。

service memcached restart
Run Code Online (Sandbox Code Playgroud)

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

telnet 127.0.0.1 11211
telnet 127.0.0.1 11212
Run Code Online (Sandbox Code Playgroud)

预期输出是;

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Run Code Online (Sandbox Code Playgroud)

结果是应用非常快;

最终申请时间表

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


Jak*_*las 2

这是相当不寻常的行为(除非你正在做某事,嗯……不寻常;)。

尝试使用 PHP 分析器之一来查看发生了什么。我可以推荐XHProfXHProf GUI。它易于设置和使用。

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

编辑:我偶然发现了从 Symfony 博客链接的这篇文章:http ://12wiki.blogspot.com.es/2012/11/why-does-symfony-2-firewall-take-so.html

看来是DNS问题。