我遇到Symfony2防火墙组件在某些请求上花费很长时间的问题。
我注意到它主要发生在AJAX请求期间,非常具体 - 当我在学说中使用LIKE%..%语句搜索实体时(不确定它是否重要,但这是我注意到的;))。
稍后调用相同的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\SecurityBundle
和JMSSecurityExtraBundle
。
答案 0 :(得分:3)
我遇到了同样的问题,想与你们分享解决方案。
由Symfony \ Component \ Security \ Http \ Firewall~107406 ms引起的问题
解;
在我们的案例中,问题是我们在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实例,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 '^]'.
结果是应用非常快;
我希望这个解决方案可以帮到你。
答案 1 :(得分:2)
尝试使用其他会话处理程序。我的Vagrant盒子里有同样的问题。不知道是什么造成的。有关详细信息,请参阅http://ctors.net/2014/04/21/symfony_slow_in_vagrant。
答案 2 :(得分:1)
这是一种相当不寻常的行为(除非你做某事,嗯......不寻常;)。
尝试使用其中一个PHP分析器来查看正在发生的事情。我可以向XHProf推荐XHProf GUI。它易于设置和使用。
我只是猜测,但问题可能与您提到的数据库查询有关。检查查询中使用的字段是否设置了适当的索引。
编辑:我偶然发现了Symfony博客链接的这篇文章:http://12wiki.blogspot.com.es/2012/11/why-does-symfony-2-firewall-take-so.html
这似乎是一个DNS问题。