बहुत बार 'बहुत अधिक खुली फ़ाइलें उच्च लोड लिनक्स सर्वर पर त्रुटियां होती हैं। इसका मतलब है कि एक प्रक्रिया ने बहुत सारी फाइलें (फाइल डिस्क्रिप्टर) खोली हैं और नई नहीं खोल सकती हैं। लिनक्स में, प्रत्येक प्रक्रिया या उपयोगकर्ता के लिए अधिकतम खुली फ़ाइल सीमा डिफ़ॉल्ट रूप से निर्धारित की जाती है और मान छोटे होते हैं।
इस लेख में हम सीखेंगे कि लिनक्स में खुली फाइलों की अधिकतम संख्या पर वर्तमान सीमा की जांच कैसे करें और पूरे मेजबान, व्यक्तिगत सेवा या वर्तमान सत्र के लिए इसे कैसे बदलें।
'बहुत अधिक फ़ाइलें खोलें' त्रुटि और Linux में फ़ाइल सीमाएं खोलें
सबसे पहले, आइए देखें कि 'बहुत अधिक खुली हुई फ़ाइलें' त्रुटि कहाँ दिखाई देती है। बड़ी संख्या में लॉग पढ़ते समय यह सबसे अधिक बार स्थापित NGINX/httpd वेब सर्वर या डेटाबेस सर्वर (MySQL/MariaDB/PostgreSQL) वाले सर्वर पर होता है। उदाहरण के लिए, जब एक Nginx वेब सर्वर खुली फ़ाइल सीमा से अधिक हो जाता है, तो आपको एक त्रुटि दिखाई देगी:
socket () failed (29: Too many open files) while connecting to upstream
इस कमांड का उपयोग करके, आप अपने सिस्टम द्वारा खोले जा सकने वाले फाइल डिस्क्रिप्टर की अधिकतम संख्या प्राप्त कर सकते हैं:
# cat /proc/sys/fs/file-max
वर्तमान उपयोगकर्ता के लिए खुली फ़ाइल सीमा 1024 है। आप इसे निम्न प्रकार से देख सकते हैं:
# ulimit -n
दो सीमा प्रकार हैं:कठिन और नरम . एक उपयोगकर्ता सॉफ्ट लिमिट को बदल सकता है (हालाँकि, सॉफ्ट वैल्यू हार्ड से अधिक नहीं हो सकती)। केवल एक विशेषाधिकार प्राप्त या मूल उपयोगकर्ता ही हार्ड लिमिट मान को संशोधित कर सकता है।
सॉफ्ट लिमिट प्रदर्शित करने के लिए, यह कमांड चलाएँ:
# ulimit –nS
हार्ड लिमिट मान प्रदर्शित करने के लिए:
# ulimit -nH
Linux में अधिकतम खुली फ़ाइल सीमा कैसे बढ़ाएँ?
सभी सेवाओं को बड़ी संख्या में फ़ाइलें खोलने की अनुमति देने के लिए, आप अपने Linux OS की सीमाएँ बदल सकते हैं। सर्वर या सत्र के पुनरारंभ होने के बाद नई सेटिंग्स को स्थायी बनाने और उनके रीसेट को रोकने के लिए, आपको /etc/security/limits.conf में परिवर्तन करने होंगे। . ये पंक्तियां जोड़ें:
* hard nofile 97816 * soft nofile 97816
यदि आप उबंटू का उपयोग कर रहे हैं, तो इस लाइन को भी जोड़ें:
session required pam_limits.so
यह पैरामीटर उपयोगकर्ता प्रमाणीकरण के बाद खुली फाइलों की सीमा निर्धारित करने की अनुमति देता है।
कोई भी परिवर्तन करने के बाद, टर्मिनल को पुनः लोड करें और max_open_files मान की जाँच करें:
# ulimit -n
97816
प्रति सेवा ओपन फाइल डिस्क्रिप्टर सीमा बढ़ाना
आप संपूर्ण ऑपरेटिंग सिस्टम के बजाय किसी विशिष्ट सेवा के लिए ओपन फ़ाइल डिस्क्रिप्टर की सीमा बदल सकते हैं। आइए अपाचे को एक उदाहरण के रूप में लें। systemctl का उपयोग करके सेवा सेटिंग खोलें:
# systemctl edit httpd.service
अपनी इच्छित सीमाएँ जोड़ें, उदा.:
[Service] LimitNOFILE=16000 LimitNOFILESoft=16000
परिवर्तन करने के बाद, सेवा कॉन्फ़िगरेशन को अपडेट करें और इसे पुनरारंभ करें:
# systemctl daemon-reload
# systemctl restart httpd.service
यह सुनिश्चित करने के लिए कि क्या मान बदल गए हैं, सेवा पीआईडी प्राप्त करें:
# systemctl status httpd.service
उदाहरण के लिए, सेवा PID 3724 है:
# cat /proc/3724/limits | grep "Max open files”
इस प्रकार, आपने किसी विशिष्ट सेवा के लिए अधिकतम खुली हुई फ़ाइलों के मान बदल दिए हैं।
Nginx और Apache के लिए अधिकतम ओपन फाइल लिमिट कैसे सेट करें?
वेब सर्वर के लिए खुली फाइलों की संख्या पर सीमा बदलते समय, आपको सेवा कॉन्फ़िगरेशन फ़ाइल भी बदलनी होगी। उदाहरण के लिए, Nginx कॉन्फ़िगरेशन फ़ाइल में निम्न निर्देश मान निर्दिष्ट/बदलें /etc/nginx/nginx.conf :
worker_rlimit_nofile 16000वर्कर_कनेक्शन 8192 के साथ एक अत्यधिक लोड 8-कोर सर्वर पर Nginx को कॉन्फ़िगर करते समय, आपको 8192*2*8 (vCPU) =131072 निर्दिष्ट करना होगा। कार्यकर्ता_rlimit_nofile.
फिर Nginx को पुनरारंभ करें।
अपाचे के लिए, एक निर्देशिका बनाएँ:
# mkdir /lib/systemd/system/httpd.service.d/
फिर limit_nofile.conf फाइल बनाएं:
# nano /lib/systemd/system/httpd.service.d/limit_nofile.conf
इसमें जोड़ें:
[Service] LimitNOFILE=16000
httpd को पुनरारंभ करना न भूलें।
वर्तमान सत्र के लिए फ़ाइल खोलने की सीमा बदलें
अपने टर्मिनल सत्र के लिए अधिकतम खुली फ़ाइल सीमा बदलने के लिए, यह कमांड चलाएँ:
# ulimit -n 3000
टर्मिनल को बंद करने और एक नया सत्र बनाने के बाद, सीमाएं /etc/security/limits.conf में निर्दिष्ट मूल मानों पर वापस आ जाएंगी। ।
सिस्टम के लिए सामान्य मान बदलने के लिए /proc/sys/fs/file-max , fs.file-max मान को /etc/sysctl.conf में बदलें:
fs.file-max = 100000
और इसे लागू करें:
# sysctl -p
इस लेख में हमने सीखा है कि जब लिनक्स में ओपन फाइल डिस्क्रिप्टर की सीमा का मान बहुत छोटा है, तो समस्या को कैसे हल किया जाए, और सर्वर पर इन सीमाओं को बदलने के कुछ विकल्पों पर चर्चा की।