2012-11-19 40 views
6

Tôi gặp sự cố với thành phần tường lửa của Symfony2 về độ tuổi trên một số yêu cầu.Tường lửa Symfony2 mất độ tuổi

Tôi đã nhận thấy rằng điều này xảy ra chủ yếu trong các yêu cầu AJAX và những điều rất cụ thể - khi tôi tìm kiếm một thực thể sử dụng LIKE% ..% statements trong doctrine (không chắc chắn nó quan trọng, nhưng đó là những gì tôi nhận thấy;)) .

Gọi cùng một URL sau (1 hoặc 2 giây sau) sẽ dẫn đến thời gian xử lý tường lửa "bình thường".

Tôi không sử dụng bất kỳ nguồn dữ liệu bên ngoài nào để xác thực, mọi thứ được lưu trữ trong PostgreSQL.

Nhìn vào thời gian sau:

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

Có cách nào để gỡ lỗi các bức tường lửa trực tiếp?

cấu hình của tôi trông như thế này:

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 

Tôi đang sử dụng Symfony\SecurityBundleJMSSecurityExtraBundle.

+2

Hãy thử sử dụng địa chỉ IP thực (thay vì tên máy chủ) cho máy chủ cơ sở dữ liệu của bạn. http://12wiki.blogspot.com.es/2012/11/why-does-symfony-2-firewall-take-so.html – Cerad

+1

Có nhiều yêu cầu AJAX xử lý cùng lúc không ot đó là yêu cầu duy nhất? – AlterPHP

+0

Vâng, đó là người duy nhất. Mặc dù ... Đó là một tìm kiếm trực tiếp, tức là. tìm kiếm dưới dạng loại người dùng (với độ trễ 100ms khi người dùng ngừng nhập) và mọi yêu cầu AJAX trước đó đều bị hủy. Nhưng nó thực sự có thể là các yêu cầu bị hủy bỏ nhưng chúng vẫn đang được xử lý bởi máy chủ. –

Trả lời

1

Hành vi khá bất thường (trừ khi bạn đang làm điều gì đó, tốt ... bất thường;).

Hãy thử sử dụng một trong các trình biên dịch PHP để xem những gì đang diễn ra. Tôi có thể đề xuất XHProf với XHProf GUI. Thật dễ dàng để thiết lập và sử dụng.

Tôi chỉ đoán, nhưng sự cố có thể liên quan đến truy vấn cơ sở dữ liệu mà bạn đã đề cập. Kiểm tra xem các trường được sử dụng trong truy vấn có thiết lập chỉ mục thích hợp không.

Edit: Tôi vô tình vấp vào bài viết này liên kết từ blog Symfony: http://12wiki.blogspot.com.es/2012/11/why-does-symfony-2-firewall-take-so.html

Nó có vẻ là một vấn đề DNS.

+0

Vâng, tôi thấy rằng bài viết trước nhưng tiếc là nó không phải là một giải pháp cho tôi: ( –

+0

Trong trường hợp đó, bắt đầu lập hồ sơ;) –

3

Tôi gặp sự cố tương tự và muốn chia sẻ giải pháp với các bạn.

Server Response Time increase

Vấn đề gây ra bởi, Symfony \ Component \ Security \ Http \ Firewall ~ 107.406 ms

Application Timeline

Giải pháp;

Trong trường hợp của chúng tôi, sự cố là trình xử lý phiên mà chúng tôi đã sử dụng trên tệp php.ini.

Cấu hình trước;

session.save_handler = files 

Cấu hình mới;

;session.save_handler = files 

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

Tôi đã thay đổi trình xử lý phiên thành memcached.Như tôi đã sử dụng memcached tôi cần dụ thứ hai của memcached hoặc như tôi thực hiện cổng bổ sung lắng nghe bởi memcached giải quyết vấn đề đó;

Để chạy memcached để nghe hai cổng, tôi chỉnh sửa memcached.conf

Cấu hình trước;

-p 11211 
-l 127.0.0.1 

mới cấu hình

#-p 11211 
#-l 127.0.0.1 

-l 127.0.0.1:11211 
-l 127.0.0.1:11212 

và chỉ cần khởi động lại dụ memcached, memcached bắt đầu lắng nghe hai cổng trên cùng một ví dụ.

service memcached restart 

Để xác thực rằng memcached lắng nghe và phản hồi trên các cổng mới, bạn có thể chạy lệnh telnet;

telnet 127.0.0.1 11211 
telnet 127.0.0.1 11212 

sản lượng dự kiến ​​là;

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

Kết quả là ứng dụng rất nhanh;

Final Application Timeline

Tôi hy vọng giải pháp này sẽ giúp ích cho bạn.

Các vấn đề liên quan