सवाल एक उच्च मात्रा प्रणाली के लिए प्रैक्टिकल अधिकतम खुली फ़ाइल वर्णनकर्ता (ulimit -n)


हमने हाल ही में हमारे आवेदन का परीक्षण लोड करना शुरू कर दिया और देखा कि यह 24 घंटे बाद फाइल डिस्क्रिप्टर से बाहर हो गया।

हम डेल 1 9 55 पर आरएचईएल 5 चला रहे हैं:

सीपीयू: 2 एक्स डुअल कोर 2.66GHz 4 एमबी 5150 / 1333FSB राम: 8 जीबी रैम एचडीडी: 2 एक्स 160 जीबी 2.5 "सैटा हार्ड ड्राइव

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

मेरा पहला विचार आयाम के कुछ आदेशों द्वारा उलिमिट-एन पैरामीटर को बढ़ाने के लिए था और फिर परीक्षण फिर से चलाया गया था, लेकिन मैं इस चर को बहुत अधिक स्थापित करने की किसी भी संभावित विधियों को जानना चाहता था।

क्या यह पता लगाने के अलावा कि हमारे सॉफ़्टवेयर सैद्धांतिक रूप से कितने फ़ाइल डिस्क्रिप्टर कर सकते हैं, इस सेटिंग को स्थापित करने के लिए कोई अन्य सर्वोत्तम प्रथाएं हैं?


69
2017-07-31 22:35


मूल




जवाब:


ये सीमाएं उस समय से आईं जहां कई "सामान्य" उपयोगकर्ता (ऐप्स नहीं) सर्वर साझा करेंगे, और हमें बहुत से संसाधनों का उपयोग करने से बचाने के तरीकों की आवश्यकता थी।

वे उच्च प्रदर्शन सर्वर के लिए बहुत कम हैं और हम आम तौर पर उन्हें बहुत अधिक संख्या में सेट करते हैं। (24k या तो) यदि आपको उच्च संख्या की आवश्यकता है, तो आपको sysctl फ़ाइल-अधिकतम विकल्प (आमतौर पर उबंटू पर 40k तक सीमित और राल पर 70k तक) को बदलने की आवश्यकता है।

उलिमिट सेट करना:

# ulimit -n 99999

Sysctl अधिकतम फ़ाइलें:

#sysctl -w fs.file-max=100000

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


70
2017-08-01 13:08



@ सुकुरी धन्यवाद। हम संसाधन लीक के बारे में निश्चित रूप से चिंतित हैं लेकिन ऐसा लगता है कि ऐसा नहीं लगता है। हम दोनों lsof और netstat देख रहे हैं और जबकि संख्याएं अधिक हैं, वे बढ़ते नहीं रहते हैं, वे विस्तार और अनुबंध करते हैं। मैं उम्मीद करता हूं कि यदि कोई रिसाव था, तो खुले सॉकेट या वर्णक की संख्या समय के साथ बढ़ती रहेगी। - Kevin
ulimit सीमा प्रति उपयोगकर्ता नहीं है, लेकिन प्रति प्रक्रिया! देख unix.stackexchange.com/questions/55319/...  और यह fs.file-max सेटिंग पूरी तरह से सर्वर के लिए है (इसलिए सभी प्रक्रियाओं को एक साथ)। - Tonin


आप हमेशा बस कर सकते हैं

cat /proc/sys/fs/file-nr

'उच्च लोड' स्थिति के दौरान यह देखने के लिए कि कितने फ़ाइल डिस्क्रिप्टर उपयोग में हैं।

अधिकतम तक - यह केवल उस पर निर्भर करता है कि आप क्या कर रहे हैं।


13
2018-05-18 12:22



यहां मैं सोच रहा था कि उपरोक्त आदेश ने मुझे दिखाए जाने पर 143000 काफी अच्छा था 8288 0 793377! - Sridhar-Sarnobat


यदि फ़ाइल डिस्क्रिप्टर टीसीपी सॉकेट आदि हैं, तो आप सॉकेट बफर और अन्य कर्नेल ऑब्जेक्ट्स के लिए बड़ी मात्रा में मेमोरी का उपयोग करने का जोखिम उठाते हैं; यह स्मृति स्वीकार्य नहीं होने जा रही है।

लेकिन अन्यथा, नहीं, सिद्धांत रूप में कोई समस्या नहीं होनी चाहिए। यह जानने के लिए कर्नेल दस्तावेज़ों से परामर्श लें कि यह कितना कर्नेल मेमोरी उपयोग करेगा, और / या इसका परीक्षण करेगा।

हम एक बड़ी समस्या के बिना ~ 10k फ़ाइल डिस्क्रिप्टर के साथ डेटाबेस सर्वर चलाते हैं (ज्यादातर वास्तविक डिस्क फ़ाइलों पर), लेकिन वे 64-बिट हैं और उनमें रैम का भार है।

Ulimit सेटिंग प्रति-प्रक्रिया है, लेकिन एक सिस्टम-व्यापी सीमा भी है (32k मुझे डिफ़ॉल्ट रूप से लगता है)


6
2017-08-01 12:27





मैं किसी भी सर्वोत्तम प्रथाओं के बारे में व्यक्तिगत रूप से अवगत नहीं हूं। यह सिस्टम फ़ंक्शन के आधार पर कुछ हद तक व्यक्तिपरक है।

याद रखें कि 1024 जो आप देख रहे हैं वह एक प्रति-उपयोगकर्ता सीमा है और सिस्टम-व्यापी सीमा नहीं है। इस प्रणाली पर आप कितने एप्लिकेशन चलाते हैं इस पर विचार करें। क्या यह एकमात्र है? क्या वह उपयोगकर्ता जो इस एप्लिकेशन को कुछ और कर रहा है? (आईई क्या आपके पास इस खाते का उपयोग लॉगिन करने और उन स्क्रिप्ट चलाने के लिए है जो संभावित रूप से भाग सकते हैं?)

बॉक्स को देखते हुए केवल यह एक एप्लीकेशन चल रहा है और खाता चल रहा है, कहा गया है कि एप्लिकेशन केवल उस उद्देश्य के लिए है, मुझे आपकी सीमा बढ़ाने में कोई हानि नहीं दिखती है। यदि यह एक घर की देव टीम है, तो मैं उनकी राय मांगूंगा। यदि यह किसी तृतीय पक्ष विक्रेता से है, तो उनके पास विशिष्ट आवश्यकताएं या अनुशंसाएं हो सकती हैं।


2
2017-07-31 22:53



@ ग्राहमक्स सिस्टम इस एप्लिकेशन को समर्पित है और उपयोगकर्ता जो एप्लिकेशन चलाता है केवल इस एप्लिकेशन को चलाता है। मैं इन-हाउस देव टीम का हिस्सा हूं, इसलिए वहां कोई मदद नहीं है। - Kevin
सीमा प्रति उपयोगकर्ता नहीं है, बल्कि प्रति प्रक्रिया है। देख unix.stackexchange.com/questions/55319/... - Tonin


ऐसा लगता है कि उन सवालों में से एक ने "विकास वातावरण में इसका परीक्षण" के साथ सबसे अच्छा जवाब दिया। मुझे याद है कि साल पहले सूर्य घबरा गया था जब आप इससे गड़बड़ कर रहे थे, लेकिन वह नर्वस नहीं था। उस समय की सीमा भी 1024 थी, इसलिए मुझे यह देखने में थोड़ा आश्चर्य हुआ कि लिनक्स के लिए यह वही है, ऐसा लगता है कि यह अधिक होना चाहिए।

जब मैंने आपके प्रश्न के उत्तर के लिए गुगल किया तो मुझे निम्न लिंक शैक्षणिक मिला: http://www.netadmintools.com/art295.html

और यह भी एक: https://stackoverflow.com/questions/1212925/on-linux-set-maximum-open-files-to-unlimited-possible


1
2017-08-01 00:51