एक अपस्ट्रीम प्रतिक्रिया एक अस्थायी फ़ाइल के लिए बफ़र की जाती है


59

मेरे पास एक बड़ा और धीमा (जटिल डेटा, जटिल सीमांत) वेब एप्लिकेशन RoRहै Puma, nginxजो रिवर्स प्रॉक्सी के रूप में निर्मित और परोसा जाता है । को देखते हुए nginxत्रुटि लॉग, मैं काफी कुछ प्रविष्टियों की तरह देखें:

2014/04/08 09:46:08 [warn] 20058#0: *819237 an upstream response is buffered to a temporary file 
    /var/lib/nginx/proxy/8/47/0000038478 while reading upstream, 
    client: 5.144.169.242, server: engagement-console.foo.it, 
    request: "GET /elements/pending?customer_id=2&page=2 HTTP/1.0", 
    upstream: "http://unix:///home/deployer/apps/conversationflow/shared/sockets/puma.sock:/elements/pending?customer_id=2&page=2", 
    host: "ec.reputationmonitor.it", 
    referrer: "http://ec.foo.it/elements/pending?customer_id=2&page=3"

मैं बहुत उत्सुक हूं क्योंकि यह बहुत संभावना नहीं है कि पृष्ठ अलग-अलग उपयोगकर्ताओं और विभिन्न उपयोगकर्ता इंटरैक्शन के लिए समान है, और मुझे नहीं लगता कि डिस्क पर प्रतिक्रिया बफरिंग आवश्यक / उपयोगी है।

मैं इसके बारे में जानता हूं proxy_max_temp_file_sizeऔर इसे 0 पर सेट करता हूं , लेकिन यह मुझे थोड़ा अजीब लगता है (मेरी प्रॉक्सी बफर करने की कोशिश करती है लेकिन कोई फाइल नहीं है जहां बफर करना है ... यह कैसे तेज हो सकता है?)।

मेरे प्रश्न हैं:

  1. मैं [चेतावनी] कैसे हटा सकता हूं और बफरिंग प्रतिक्रियाओं से बच सकता हूं। क्या इसे बंद करना proxy_bufferingया proxy_max_temp_file_size0 पर सेट करना बेहतर है ? क्यों?

  2. यदि nginxबफ़र्स की प्रतिक्रिया होती है: यह बफ़र्ड प्रतिक्रिया कब, किससे और क्यों मिलती है?

  3. क्यों nginxबदल जाता है proxy_bufferingडिफ़ॉल्ट रूप से चालू हैं और फिर [चेतावनी दी है] आप ही करता है, तो यह वास्तव में एक प्रतिक्रिया बफ़र्स?

  4. जब एक प्रतिक्रिया उस विकल्प को ट्रिगर करती है? जब यह प्रतिक्रिया प्राप्त करने के लिए> कुछ सेकंड (कितने?) लेता है क्या यह विन्यास योग्य है?

टीआईए, एनजीडब्ल्यू।


1
मुझे लग रहा है कि आप कैशिंग के साथ बफरिंग को भ्रमित कर रहे हैं। बफ़रिंग वह प्रक्रिया है जो मेमोरी आवंटन की अनुमति से अधिक डेटा लोड करने की अनुमति देती है।
स्लाव

जवाबों:


74

1) मैं [चेतावनी] कैसे निकाल सकता हूं और बफरिंग प्रतिक्रियाओं से बच सकता हूं? क्या प्रॉक्सी बंद करना बेहतर है या प्रॉक्सी_मैक्स_टैप_फाइल_साइज़ को 0 पर सेट करना है? क्यों?

proxy_max_temp_file_sizeइसे हटाने के लिए आपको 0 पर सेट करना चाहिए । proxy_bufferingनिर्देश सीधे चेतावनी से संबंधित नहीं है। आप इसे किसी भी बफ़रिंग को रोकने के लिए बंद कर सकते हैं लेकिन यह सामान्य रूप से अनुशंसित नहीं है (जब तक कि यह धूमकेतु के लिए आवश्यक नहीं है )।

2) यदि नग्नेक्स बफ़र प्रतिक्रिया करता है तो यह बफ़र प्रतिक्रिया कब, किससे और क्यों करता है?

यह तुरंत सर्वर करता है, लेकिन एक ग्राहक के पास आमतौर पर बहुत धीमा कनेक्शन होता है और आपके एप्लिकेशन द्वारा उत्पादित के रूप में तेजी से प्रतिक्रिया डेटा का उपभोग नहीं कर सकता है। अपने आवेदन ASAP को जारी करने के लिए Nginx पूरी प्रतिक्रिया को बफर करने की कोशिश करता है।

इसे भी देखें: http://aosabook.org/en/nginx.html

3) क्यों nginx डिफ़ॉल्ट रूप से प्रॉक्सी_बफ़रिंग को बदल देता है और फिर [चेतावनी] यदि आप वास्तव में प्रतिक्रिया को बफ़र करते हैं तो?

जैसा कि मैंने पहले ही उल्लेख किया है, proxy_bufferingसीधे चेतावनी से संबंधित नहीं है। यह आम तौर पर अनुकूलित प्रॉक्सी संचालन के लिए आवश्यक है और इसे अपमानजनक प्रदर्शन और थ्रूपुट बंद कर रहा है।

जब कोई प्रतिक्रिया कॉन्फ़िगर की गई मेमोरी बफ़र्स में फिट नहीं होती है, तो केवल नग्नेक्स आपको चेतावनी देता है। यदि यह आपके लिए ठीक है तो आप चेतावनी को अनदेखा कर सकते हैं।

4) जब एक प्रतिक्रिया उस विकल्प को ट्रिगर करती है? जब यह प्रतिक्रिया को पूरा करने के लिए कुछ सेकंड (कितने?) से लेता है? क्या यह विन्यास योग्य है?

यह तब चलता है जब मेमोरी बफ़र्स पूर्ण होते हैं। कृपया, डॉक्स को देखें, पूरे तंत्र को समझाया गया है: http://nginx.org/r/proxy_max_temp_file_size

आप मेमोरी बफ़र्स बढ़ाना चाह सकते हैं।


5
# 1 के लिए, अस्थायी फ़ाइलों की आकार सीमा को हटाने से बफरिंग चेतावनी कैसे रोकती है? मुझे नहीं लगता कि यह सही है क्योंकि मेरे पास यह निर्देश 0 पर सेट है और अभी भी चेतावनी मिलती है।
फिल

यह उत्तर पर्याप्त रूप से स्पष्ट नहीं है, क्या प्रदर्शन के लिए सेट करना बेहतर proxy_max_temp_file_sizeहै 0या यह केवल उस चेतावनी को हटाने का एक तरीका है?
ओफिर पीर

12

निम्न कॉन्फ़िगरेशन मेरे सर्वर पर ठीक काम करता है।

proxy_buffers 16 16k;  
proxy_buffer_size 16k;

2
क्या दूसरी दिशा निरर्थक है, यानी 16kपहली पंक्ति में दूसरी पंक्ति के समान सटीक काम कर रही है?
EoghanM

1
@ EoghanM डॉक्स के अनुसार, नहीं। प्रॉक्सी सर्वर की प्रतिक्रिया (उर्फ हेडर) के पहले भाग के लिए Proxy_Buffer_size (बफर, नॉट प्लुरल) लागू होता है Sets the size of the buffer used for reading the first part of the response received from the proxied server. This part usually contains a small response header। Proxy_buffers बाकी प्रतिक्रिया के लिए है।
सीडीई

2
तुमने आज मेरे कुछ बाल बचा लिए हैं। मैं अपने सर्वर से एक डॉक कंटेनर में नंगेक्स को घुमा रहा था और यह धीरे-धीरे धीमा होना शुरू हो गया। यह "तय" है। निश्चित नहीं है कि हमारे सर्वर पर संस्करण डिफ़ॉल्ट रूप से है या नहीं, लेकिन कंटेनर में एक को निश्चित रूप से इन सेटिंग्स की आवश्यकता है।
क्रिस्टियन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.