2012-11-19 9 views
6

Symfony2ファイアウォールコンポーネントに問題が発生しました。symfony2のファイアウォールには年齢がかかります

私は主にAJAXリクエスト中に発生していることに気がつきました。特に、doctrineでLIKE%..%ステートメントを使ってエンティティを検索したとき(重要なことは分かりませんでしたが、 。

ちょっと後で(1または2秒後に)同じURLを呼び出すと、ファイアウォールの処理に通常の時間がかかるようになります。

私は認証に外部データソースを使用していません。すべてPostgreSQLに格納されています。以下のタイムラインで

ルック:

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

は、直接、ファイアウォールをデバッグする方法はありますか?

私の設定は次のようになります。私はSymfony\SecurityBundleJMSSecurityExtraBundleを使用しています

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 

+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の2番目のインスタンスが必要でした。私はmemcached.conf

前の設定を編集し、2つのポートをリッスンするようにmemcachedを実行するには

-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のは、同じインスタンス上の2つのポートを聞くようになりました。

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

関連する問題