linux और nginx के लिए अधिकतम फ़ाइल डिस्क्रिप्टर को समझना, और वर्कर_लिमिट_नोफाइल के लिए सर्वोत्तम मूल्य


10

मुझे nginx पर "बहुत अधिक फ़ाइल डिस्क्रिप्टर" त्रुटि प्रतीत होती है। बहुत खोज के बाद, समाधान स्पष्ट रूप से nginx के लिए उपलब्ध फ़ाइल डिस्क्रिप्टर की संख्या को बढ़ाने के लिए है। लेकिन मेरे लिए वहाँ पर्याप्त जानकारी नहीं है, ताकि मैं इसे सार्थक और सुरक्षित तरीके से कर पाऊँ। यहां मुख्य बिंदु हैं जो अधिकांश फोरम / ईमेल थ्रेड कवर करते हैं:

  • ओएस की अपनी कुल फ़ाइल डिस्क्रिप्टर सीमा है (मेरे सिस्टम पर, cat /proc/sys/fs/file-max"100678" आउटपुट)
  • प्रत्येक उपयोगकर्ता की अपनी सीमा भी हो सकती है (लेकिन मेरे सिस्टम पर, ulimitकिसी भी उपयोगकर्ता आउटपुट के रूप में चल रहा है "असीमित" अधिक विस्तार के साथ नीचे अपडेट देखें )
  • कुछ लोगों ने इस व्यक्ति की कही गई बातों के साथ कुछ कहा: '' निर्देशात्मक कार्यकर्ता_प्रबंधित_नौफाइल "कितने" को निर्दिष्ट नहीं करता है, यह ऑपरेटिंग सिस्टम की सीमा है। यदि यह पर्याप्त नहीं है, तो निर्देशकीय कर्मचारी_श्रीमित_नोफाइल इस सीमा को बढ़ाने के लिए त्वरित और गंदा तरीका देता है। ' इसलिए मुझे लगता है कि यह है कि यह "बेहतर" है कि कॉन्फ़िगरेशन में nginx OS उपयोगकर्ता के लिए सीमा निर्धारित करें?

मैं प्रति कार्यकर्ता कनेक्शन की संख्या से अधिक वर्कर_रोलिट_ऑनफाइल वैल्यू में फेंक सकता हूं और इसे एक दिन कह सकता हूं, लेकिन मुझे लगता है कि मैं वास्तव में नहीं जानता कि यहां क्या हो रहा है।

  • प्रति कार्यकर्ता की सीमा OS की सीमा से कम क्यों होगी?
  • मुझे कैसे पता चलेगा कि मेरी सीमा अब क्या है?

अद्यतन : दोनों रूट और एक सामान्य उपयोगकर्ता के लिए, ulimit "असीमित", BUT ulimit -Hnऔर ulimit -Snदोनों आउटपुट 1024 को आउटपुट करता है

जवाबों:


10

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

सबसे पहले, आपकी फ़ाइल डिस्क्रिप्टर का उपयोग क्या है?

  1. एक ग्राहक के लिए प्रत्येक सक्रिय कनेक्शन
  2. प्रॉक्सी_पास का उपयोग करना? वह होस्ट के लिए एक सॉकेट खोलेगा: पोर्ट इन अनुरोधों को संभाल रहा है
  3. किसी स्थानीय पोर्ट के लिए प्रॉक्सी_पास का उपयोग करना? एक और खुला सॉकेट। (उस प्रक्रिया के मालिक के लिए)
  4. nginx द्वारा सेवित स्थिर फाइलें

प्रति कार्यकर्ता की सीमा OS की सीमा से कम क्यों होगी?

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

#/etc/sysctl.conf
#This sets the value you see when running cat  /proc/sys/fs/file-max
fs.file-max = 65536"


#/etc/security/limits.conf
#this sets the defaults for all users
* soft nofile 4096
* hard nofile 4096

#This overrides the default for user `usernamehere`
usernamehere soft nofile 10240
usernamehere hard nofile 10240

उन सुरक्षा सीमा परिवर्तनों के बाद मेरा मानना ​​है कि मुझे अभी भी उपयोगकर्ता के उपयोग के लिए सॉफ्टलिमिट को बढ़ाना था ulimit

मुझे कैसे पता चलेगा कि मेरी सीमा अब क्या है?

ulimit -a आपके द्वारा चलाए जा रहे उपयोगकर्ता से संबंधित सभी सीमाएँ प्रदर्शित करेगा।


1
धन्यवाद - अब जब मैंने फ़ाइल डिस्क्रिप्टर की सीमा को छोड़ दिया है, तो मैं कनेक्शन से बाहर चल रहा हूं। हो सकता है कि आप भी मेरी मदद कर सकें :) :) serverfault.com/questions/209014/…
John Bachir

1
CentOS / फेडोरा उपयोगकर्ताओं पर ध्यान दें, यदि आपके पास SELinux सक्षम है, तो आपको इसे चलाने की आवश्यकता होगी setsebool -P httpd_setrlimit 1ताकि nginx के पास अपना रैलिमेट सेट करने की अनुमति हो।
जराट

2

स्रोत की जाँच करें ईमानदार होने के लिए, लेकिन यह काफी कम है।

मैंने उपयोग किया worker_rlimit_nofile 15000;था और कोई समस्या नहीं थी, आप इसे सुरक्षित रूप से बढ़ा सकते हैं, हालांकि, फ़ाइल डिस्क्रिप्टर से बाहर चलने की संभावना कम है।

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