Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रणाली >> Linux

Linux में 'Too Many Open Files' एरर कैसे ठीक करें?

हाई-लोड Linux सर्वर पर अक्सर 'too many open files' एरर होती है। इसका मतलब है कि एक प्रोसेस ने बहुत सारी फ़ाइलें (फाइल डिस्क्रिप्टर) खोल ली हैं और नई नहीं खोल सकता। Linux में, प्रत्येक प्रोसेस या यूज़र के लिए अधिकतम ओपन फ़ाइल लिमिट डिफ़ॉल्ट रूप से सेट होती हैं और मान काफी छोटे होते हैं।

इस लेख में हम सीखेंगे कि Linux में अधिकतम ओपन फ़ाइलों की संख्या पर वर्तमान लिमिट कैसे चेक करें और इसे पूरे होस्ट, व्यक्तिगत सर्विस या वर्तमान सत्र के लिए कैसे बदलें।

'Too Many Open Files' एरर और Linux में ओपन फ़ाइल लिमिट

सबसे पहले, आइए देखें कि 'too many open files' एरर कहां दिखाई देती है। यह सबसे अधिक बार NGINX/httpd वेब सर्वर या डेटाबेस सर्वर (MySQL/MariaDB/PostgreSQL) वाले सर्वर पर बड़ी संख्या में लॉग पढ़ते समय होती है। उदाहरण के लिए, जब Nginx वेब सर्वर ओपन फ़ाइल लिमिट से अधिक हो जाता है, तो आपको एरर दिखाई देगी:

socket () failed (29: Too many open files) while connecting to upstream

Linux में  Too Many Open Files  एरर कैसे ठीक करें?

इस कमांड का उपयोग करके, आप अधिकतम फाइल डिस्क्रिप्टर प्राप्त कर सकते हैं जो आपका सिस्टम खोल सकता है:

# cat /proc/sys/fs/file-max

वर्तमान यूज़र के लिए ओपन फ़ाइल लिमिट 1024 है। आप इसे इस तरह चेक कर सकते हैं:

# ulimit -n

Linux में  Too Many Open Files  एरर कैसे ठीक करें?

दो लिमिट प्रकार हैं: Hard और Soft। एक यूज़र सॉफ्ट लिमिट बदल सकता है (हालांकि, सॉफ्ट मान हार्ड वाले से अधिक नहीं हो सकता)। केवल एक विशेषाधिकार प्राप्त या रूट यूज़र हार्ड लिमिट मान बदल सकता है।

सॉफ्ट लिमिट प्रदर्शित करने के लिए, यह कमांड चलाएं:

# ulimit -nS

हार्ड लिमिट मान प्रदर्शित करने के लिए:

# ulimit -nH

Linux में मैक्स ओपन फ़ाइल लिमिट कैसे बढ़ाएं?

सभी सर्विस को बड़ी संख्या में फ़ाइलें खोलने की अनुमति देने के लिए, आप अपने Linux OS में लिमिट बदल सकते हैं। नई सेटिंग्स को स्थायी बनाने और सर्वर या सत्र रीस्टार्ट के बाद उनके रीसेट को रोकने के लिए, आपको /etc/security/limits.conf में परिवर्तन करने होंगे। ये लाइनें जोड़ें:

* hard nofile 97816
* soft nofile 97816

यदि आप Ubuntu उपयोग कर रहे हैं, तो यह लाइन भी जोड़ें:

session required pam_limits.so

यह पैरामीटर यूज़र ऑथेंटिकेशन के बाद ओपन फ़ाइल लिमिट सेट करने की अनुमति देता है।

कोई भी परिवर्तन करने के बाद, टर्मिनल रीलोड करें और max_open_files मान चेक करें:

# ulimit -n
97816

प्रति सर्विस ओपन फ़ाइल डिस्क्रिप्टर लिमिट बढ़ाना

आप पूरे ऑपरेटिंग सिस्टम के बजाय किसी विशिष्ट सर्विस के लिए ओपन फ़ाइल डिस्क्रिप्टर की लिमिट बदल सकते हैं। आइए apache को उदाहरण के रूप में लें। Systemctl का उपयोग करके सर्विस सेटिंग्स खोलें:

# systemctl edit httpd.service

आप जो लिमिट चाहते हैं उन्हें जोड़ें, उदाहरण के लिए:

[Service]
LimitNOFILE=16000
LimitNOFILESoft=16000

Linux में  Too Many Open Files  एरर कैसे ठीक करें?

परिवर्तन करने के बाद, सर्विस कॉन्फिगरेशन अपडेट करें और इसे रीस्टार्ट करें:

# systemctl daemon-reload
# systemctl restart httpd.service

यह सुनिश्चित करने के लिए कि मान बदल गए हैं, सर्विस PID प्राप्त करें:

# systemctl status httpd.service

उदाहरण के लिए, सर्विस PID 3724 है:

# cat /proc/3724/limits | grep "Max open files"

Linux में  Too Many Open Files  एरर कैसे ठीक करें?

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

Nginx और Apache के लिए मैक्स ओपन फ़ाइल लिमिट कैसे सेट करें?

वेब सर्वर के लिए ओपन फ़ाइलों की संख्या पर लिमिट बदलते समय, आपको सर्विस कॉन्फिगरेशन फ़ाइल भी बदलनी होगी। उदाहरण के लिए, Nginx कॉन्फिगरेशन फ़ाइल /etc/nginx/nginx.conf में निम्न डायरेक्टिव मान निर्दिष्ट/बदलें:

worker_rlimit_nofile 16000

हाई लोडेड 8-कोर सर्वर पर worker_connections 8192 के साथ Nginx कॉन्फिगर करते समय, आपको worker_rlimit_nofile में 8192*2*8 (vCPU) = 131072 निर्दिष्ट करना होगा।

फिर Nginx रीस्टार्ट करें।

Apache के लिए, एक डायरेक्टरी बनाएं:

# mkdir /lib/systemd/system/httpd.service.d/

फिर limit_nofile.conf फ़ाइल बनाएं:

# nano /lib/systemd/system/httpd.service.d/limit_nofile.conf

Linux में  Too Many Open Files  एरर कैसे ठीक करें?

इसमें जोड़ें:

[Service]
LimitNOFILE=16000

httpd रीस्टार्ट करना न भूलें।

वर्तमान सत्र के लिए ओपन फ़ाइल लिमिट बदलना

अपने टर्मिनल सत्र के लिए अधिकतम ओपन फ़ाइल लिमिट बदलने के लिए, यह कमांड चलाएं:

# ulimit -n 3000

टर्मिनल बंद करने और नया सत्र बनाने के बाद, लिमिट /etc/security/limits.conf में निर्दिष्ट मूल मान पर वापस आ जाएंगी।

सिस्टम के लिए सामान्य मान /proc/sys/fs/file-max बदलने के लिए, /etc/sysctl.conf में fs.file-max मान बदलें:

fs.file-max = 100000

और इसे लागू करें:

# sysctl -p

Linux में  Too Many Open Files  एरर कैसे ठीक करें?

इस लेख में हमने सीखा कि Linux में ओपन फ़ाइल डिस्क्रिप्टर लिमिट का मान बहुत छोटा होने पर समस्या कैसे हल करें, और सर्वर पर इन लिमिट को बदलने के कुछ विकल्पों पर चर्चा की।

  1. विंडोज 10 पर 0xC00D36CB एरर कैसे ठीक करें? विंडोज 10 पर 0xC00D36CB एरर कैसे ठीक करें?

    कई विंडोज उपयोगकर्ता कुछ वीडियो फॉर्मेट (विशेष रूप से .MKV फॉर्मेट) चलाने में असमर्थ होने या .MP3 या .MP4 फाइलों का नाम बदलने या अन्य विवरण संशोधित करने का प्रयास करते समय हमसे सवाल पूछ रहे हैं। जो एरर कोड आता है वह है 0xC00D36CB। जबकि कुछ उपयोगकर्ता रिपोर्ट करते हैं कि समस्या केवल कुछ फाइलों के साथ

  1. एरर 1067 ठीक करें:  प्रोसेस अप्रत्याशित रूप से समाप्त हो गया एरर 1067 ठीक करें: 'प्रोसेस अप्रत्याशित रूप से समाप्त हो गया'

    एरर 1067 विभिन्न विंडोज सेवाओं के साथ हो सकती है और संदेश आमतौर पर तब प्रकट होता है जब आप कोई ऐसी कार्रवाई करने का प्रयास कर रहे होते हैं जो आमतौर पर किसी सेवा को शुरू करने का कारण बनेगी। इस त्रुटि संदेश की सबसे आम घटना SQL सेवा और इसके समान सेवाओं के साथ होगी। इस समस्या को हल करने के लिए कई विधियो

  1. विंडोज 11 0xc00007b त्रुटि हल करें: चरण-दर-चरण फिक्स गाइड विंडोज 11 0xc00007b त्रुटि हल करें: चरण-दर-चरण फिक्स गाइड

    इस लेख में, हमने उन हैक्स को सूचीबद्ध किया है जो विंडोज 11 में 0xc00007b त्रुटि को ठीक करने में मदद करेंगे। विंडोज OS का उपयोग करते समय त्रुटियों में पड़ना कोई बड़ी बात नहीं है। पिछले संस्करणों के साथ-साथ बिल्कुल नया विंडोज 11 बग्स और त्रुटियों से भरा हुआ है और आप किसी न किसी समय उनमें से किसी एक म