2012-11-19 5 views
6

लेता है मुझे कुछ अनुरोधों पर सिम्फनी 2 फ़ायरवॉल घटक उम्र लेने में समस्या है।Symfony2 फ़ायरवॉल उम्र

मैंने देखा है कि यह मुख्य रूप से AJAX अनुरोधों के दौरान होता है, और बहुत विशिष्ट - जब मैं LIKE% का उपयोग करके एक इकाई की खोज करता हूं .. सिद्धांत में% कथन (यह सुनिश्चित नहीं है कि यह महत्वपूर्ण है, लेकिन मैंने जो देखा है;)) ।

थोड़ी देर बाद उसी यूआरएल कॉलिंग (1 या 2 से बाद में) "सामान्य" फ़ायरवॉल प्रसंस्करण समय में परिणाम है।

मैं प्रमाणीकरण के लिए किसी बाहरी डेटा स्रोत का उपयोग नहीं कर रहा हूं, सबकुछ PostgreSQL में संग्रहीत है।

निम्नलिखित समय पर देखो:

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

वहाँ सीधे फ़ायरवॉल डिबग करने के लिए कोई तरीका है?

मेरे config इस तरह दिखता है:

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 उपयोग कर रहा हूँ।

+2

अपने डेटाबेस सर्वर के लिए एक वास्तविक आईपी पता (होस्टनाम के बजाय) का उपयोग करने का प्रयास करें। http://12wiki.blogspot.com.es/2012/11/why-does-symfony-2-firewall-take-so.html – Cerad

+1

क्या कई AJAX अनुरोध एक ही समय में प्रसंस्करण कर रहे हैं, यह केवल एक ही है? – AlterPHP

+0

हां, यह केवल एक ही है। हालांकि ... यह एक लाइव खोज है, यानी। उपयोगकर्ता प्रकार के रूप में खोजें (जब उपयोगकर्ता टाइपिंग बंद कर देता है तो 100ms देरी के साथ) और किसी भी पिछले AJAX अनुरोध निरस्त कर दिए जाते हैं। लेकिन यह वास्तव में संभव हो सकता है कि अनुरोध निरस्त हो गए हैं लेकिन वे अभी भी सर्वर द्वारा संसाधित किए जा रहे हैं। –

उत्तर

1

यह असामान्य व्यवहार है (जब तक कि आप कुछ नहीं कर रहे हैं, ठीक है ... असामान्य;)।

क्या हो रहा है यह देखने के लिए PHP प्रोफाइलरों में से एक का उपयोग करने का प्रयास करें। मैं XHProf GUI के साथ XHProf की सिफारिश कर सकता हूं। इसे स्थापित करना और उपयोग करना आसान है।

मैं बस अनुमान लगा रहा हूं, लेकिन समस्या आपके द्वारा वर्णित डेटाबेस क्वेरी से संबंधित हो सकती है। जांचें कि किसी क्वेरी में उपयोग किए गए फ़ील्ड में उचित इंडेक्स सेट हैं या नहीं।

संपादित करें: http://12wiki.blogspot.com.es/2012/11/why-does-symfony-2-firewall-take-so.html

यह एक DNS समस्या हो रहा है: मैं गलती से इस लेख Symfony ब्लॉग से लिंक पर ठोकर खाई।

+0

हां, मुझे पहले यह लेख मिला लेकिन दुर्भाग्य से यह मेरे लिए समाधान नहीं था :( –

+0

उस मामले में, प्रोफाइलिंग शुरू करें;) –

2

एक अलग सत्र हैंडलर का उपयोग करने का प्रयास करें। मेरे वग्रेंट बॉक्स में मेरा एक ही मुद्दा था। यकीन नहीं है कि इसका क्या कारण है। विवरण के लिए http://ctors.net/2014/04/21/symfony_slow_in_vagrant देखें।

3

मुझे एक ही समस्या थी और आप लोगों के साथ समाधान साझा करना चाहते हैं।

Server Response Time increase

, Symfony \ घटक \ सुरक्षा \ http \ फ़ायरवॉल ~ 107,406 एमएस

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 उदाहरण को पुन: प्रारंभ, memcached एक ही उदाहरण पर दो बंदरगाहों सुनने के लिए शुरू कर दिया।

service memcached restart 

उस ज्ञात सूची को सत्यापित करने और नए बंदरगाहों पर प्रतिक्रिया देने के लिए आप टेलनेट कमांड चला सकते हैं;

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

मुझे आशा है कि यह समाधान आपको मदद मिलेगी।