RAM से स्थिर सामग्री परोसने के लिए nginx को कैसे कॉन्फ़िगर करें?


11

मैं अपने वेब सर्वर के रूप में Nginx स्थापित करना चाहता हूं। मैं छवि फ़ाइलों को डिस्क के बजाय मेमोरी (RAM) में कैश्ड करना चाहता हूं। मैं एक छोटा पृष्ठ परोस रहा हूं और कुछ चित्र चाहता हूं जो हमेशा RAM से सेवित हो। मैं इसके लिए वार्निश (या किसी अन्य उपकरण) का उपयोग नहीं करना चाहता क्योंकि मेरा मानना ​​है कि नग्नेक्स में रैम में सामग्री को कैश करने की क्षमता है। मुझे यकीन नहीं है कि मैं इसके लिए Nginx को कैसे कॉन्फ़िगर कर सकता हूं? मैंने कुछ संयोजनों की कोशिश की, लेकिन उन्होंने काम नहीं किया। Nginx छवियों को प्राप्त करने के लिए हर समय डिस्क का उपयोग करता है।

उदाहरण के लिए, जब मैंने अपाचे बेंचमार्क को निम्नलिखित कमांड के साथ परीक्षण करने की कोशिश की:

ab -c 500 -n 1000 http://localhost/banner.jpg

मुझे निम्नलिखित त्रुटि मिलती है:

socket: Too many open files (24)

मुझे लगता है कि इसका मतलब है कि नग्नेक्स डिस्क से एक साथ बहुत सारी फाइलें खोलने की कोशिश कर रहा है और ओएस इस ऑपरेशन की अनुमति नहीं दे रहा है। किसी ने मुझे एक सही विन्यास का सुझाव दे सकते हैं?


आप लगभग निश्चित रूप से गलत अनुमान लगा रहे हैं। इसके अलावा, आप कहां से त्रुटि प्राप्त कर रहे हैं?
Womble

@womble जैसा कि मैं नीचे टिप्पणी करता हूं समस्या समवर्ती हो सकती है। मेमोरी में सामग्री उपलब्ध होने से पहले कई धागे एक साथ कोशिश कर रहे हैं। क्या आप कृपया बता सकते हैं कि मुझे क्यों लगता है कि मैं गलत अनुमान लगा रहा हूँ?
विजयेंद्र

जवाबों:


9

यदि यह स्थिर सामग्री है तो इसे डिफ़ॉल्ट रूप से मेमोरी में कैश किया जाएगा (जब तक कि कोई मेमोरी नहीं बची है), नगनेक्स द्वारा नहीं, लेकिन ओएस - जो सब छोड़ दिया जाएगा डिस्क-स्टेट स्टेट होगा ()।

यदि आप 100% मेमोरी सॉल्यूशन चाहते हैं, तो आप सिर्फ रैमडिस्क को कॉन्फ़िगर कर सकते हैं और वहां से डेटा परोस सकते हैं।


हां, मैं समझता हूं कि ओएस द्वारा सामग्री को मेमोरी में कैश किया जाता है। लेकिन धारणा यह है कि फ़ाइल पहले से ही मेमोरी में उपलब्ध है। समस्या संक्षिप्त हो सकती है। मेमोरी से सामग्री उपलब्ध होने से पहले कई थ्रेड्स एक साथ कोशिश कर रहे हैं। तुम क्या सोचते हो?
विजयेंद्र

1
यह केवल एक समस्या है अगर अनुरोधों की संख्या एक पल में 0 से 500 तक जाती है - एक बार फ़ाइल पढ़ने के बाद इसे तब तक संग्रहीत किया जाएगा जब तक कि मेमोरी की आवश्यकता न हो (यदि हाल ही में उपयोग की गई फ़ाइल कैश से निकाल दी गई है, तो मेमोरी पूर्ण और नई फ़ाइल की आवश्यकता है कैश्ड होना)। वास्तविक जीवन में होने वाली बाधाओं में से कोई भी पतला नहीं है। यदि आपको यकीन है कि इसके बजाय एक वास्तविक जोखिम रैमडिस्क समाधान का उपयोग करना है, तो बस प्रत्येक रिबूट के बाद रैमडिस्क पर डेटा को पुनर्स्थापित करना सुनिश्चित करें - रैमडिस्क परिभाषा द्वारा लगातार भंडारण नहीं है।
c2h5oh

ठीक है, मैं रैमडिस्क की कोशिश करूंगा और देखूंगा कि यह कैसे काम करता है। प्रतिक्रिया के लिए धन्यवाद।
विजयेंद्र

9

एक बार जब सर्वर ने डिस्क से एक फ़ाइल पढ़ ली है, तो इसे राम को कैश कर दिया जाएगा (और यदि आप राम से बाहर हैं तो अलग फ़ाइल द्वारा प्रतिस्थापित किया जाएगा), समस्या आपकी खाता सीमा के साथ है, आप इतनी फ़ाइलों को नहीं खोल सकते हैं ( रन 'अलिमित-ए'),

यदि आप इस सीमा को बदलना चाहते हैं - /etc/security/limits.conf के बारे में पढ़ें


1
आप सही हैं, खुली फाइल की सीमा एक समस्या थी क्योंकि सीमा मेरे सिस्टम पर 256 है। लेकिन मुझे अभी भी यह पता लगाने की ज़रूरत है कि मेमोरी से फ़ाइलों को पढ़ने के लिए नग्नेक्स को कॉन्फ़िगर कैसे करें, बल्कि डिस्क। मैं अपनी खुली फ़ाइल सीमा को बदलना नहीं चाहता और न ही बाद के अनुरोधों के लिए कैश उपयोग को प्राप्त करना चाहता हूं।
विजयेंद्र

4
"मैं अपनी खुली फ़ाइल सीमा को बदलना नहीं चाहता" - आप इसे गलत कर रहे हैं। ओह, बहुत, बहुत गलत।
Womble

3
@womble मैं इस मुद्दे को ठीक करना समझता हूं कि सीमा को बदलना सबसे आसान उपाय है। मैं इस सीमा को बदलना नहीं चाहता, यह देखने के लिए कि सीमा को बदले बिना कॉन्फ़िगरेशन के साथ मैं सबसे अच्छा क्या कर सकता हूं। मैं बात करता हूं कि मैं कैशिंग और कॉन्फ़िगरेशन के कुछ अन्य पहलुओं को बदलकर चीजों को सुधार सकता हूं। और वैसे, क्या आप किसी को गलत होने का दावा करते हुए कारण / सुझाव दे सकते हैं। यहां तक ​​कि अपनी पहली टिप्पणी में भी आपने बिना कोई कारण बताए ऐसा किया। यह पेशेवर सुझाव देने के लिए एक जगह है, कृपया इसे अपनी फेसबुक वॉल के रूप में मानें।
विजयेंद्र

7

तो मुझे पता है कि यह वास्तव में पुराना है, लेकिन यहाँ जाता है।

  1. नग्नेक्स बॉक्स के बाहर मेमोरी कैशिंग नहीं करता है, आप इसके लिए मेम्चे को देखना चाहेंगे, मैं इसके लिए ओपनएस्टी पैक की सिफारिश करूंगा: http://openresty.org/। आप बॉक्स से बाहर निकलते हैं (जैसा कि ऊपर उत्तर दिया गया था पेज कैश है)
  2. वह त्रुटि संदेश, मैं लगभग निश्चित हूं, nginx से नहीं है, फ़ाइल सीमाओं के लिए nginx त्रुटियां इस तरह दिखती हैं "विफल (24: बहुत खुली फाइलें)"। यूनिक्स सॉकेट्स में याद रखें कि फाइलें भी हैं, इसलिए जिस उपयोगकर्ता के लिए आप ab चल रहे हैं, उसे चलाने के लिए उस सत्र के लिए अपने ulimit को समायोजित करने की आवश्यकता है। चूँकि आपने कहा था कि आपकी सीमा 256 थी, इसलिए आप 500 कनेक्शन का उपयोग करने के लिए कह रहे हैं, यह आपकी सीमा को अधिकतम कर रहा है।

बेन व्हिटेकर सही था, यह मुद्दा ab से आया, जो 500 सॉकेट्स बनाने की कोशिश करता है <=> फाइलें (linux os में)।
bachden

2

RAM में कैश की गई फ़ाइल अभी भी एक फ़ाइल है!

इसके बजाय Nginx के Memcached cache मॉड्यूल का उपयोग करने का प्रयास करें। लेकिन फिर भी, 1000 समवर्ती कनेक्शन बहुत बड़ा है, क्या आपको लगता है कि आपका मामला है?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.