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


मेरे पास 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_size को 0 पर सेट करना बेहतर है? क्यूं कर?

2) अगर nginx प्रतिक्रिया देता है तो यह buffered प्रतिक्रिया की सेवा करता है, किसके लिए और क्यों?

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

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

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


46
2018-04-08 08:01


मूल


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


जवाब:


1) मैं [चेतावनी] को कैसे हटा सकता हूं और प्रतिक्रियाओं को बफर करने से बच सकता हूं? क्या proxy_buffering को बंद करना या proxy_max_temp_file_size को 0 पर सेट करना बेहतर है? क्यूं कर?

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

2) अगर nginx प्रतिक्रिया देता है तो यह buffered प्रतिक्रिया की सेवा करता है, किसके लिए और क्यों?

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

यह भी देखें: http://aosabook.org/en/nginx.html

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

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

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

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

जब मेमोरी बफर भर जाते हैं तो यह ट्रिगर होता है। कृपया, दस्तावेज़ों को देखें, पूरी तंत्र समझाया गया है: http://nginx.org/r/proxy_max_temp_file_size

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


59
2018-04-08 11:17



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


निम्न विन्यास मेरे सर्वर पर ठीक काम करता है।

proxy_buffers 16 16k;  
proxy_buffer_size 16k;

10
2017-07-04 15:51



दूसरा निर्देश अनावश्यक है, यानी 16k पहली पंक्ति में दूसरी पंक्ति के समान सटीक कर रहा है? - EoghanM
@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 बाकी प्रतिक्रिया के लिए है। - cde
आपने आज मेरे कुछ बाल बचाए हैं। मैं अपने सर्वर से nginx को एक डॉकर कंटेनर में ले जा रहा था और यह धीरे-धीरे धीमा होना शुरू हो गया। यह "तय" है। सुनिश्चित नहीं है कि हमारे सर्वर पर संस्करण डिफ़ॉल्ट रूप से था या नहीं, लेकिन कंटेनर में से एक को निश्चित रूप से इन सेटिंग्स की आवश्यकता थी। - Krystian