मैं उन फ़ाइलों की संख्या पर एक सीमा कैसे निर्धारित कर सकता हूं, जो लिनक्स खोल सकती हैं?


11

मैं एक जावा ऐप का उपयोग करके चलाने की योजना बना रहा हूं nohup ... &। सीमा इस तरह आदेशों पर लागू होनी चाहिए।


लेकिन इससे मेरे जावा प्रोग्राम में एक त्रुटि हुई

जवाबों:


7

अधिकांश सिस्टम PAM का उपयोग करते हैं , और pam_limitsमॉड्यूल आधारित सीमाएँ हैं /etc/security/limits.conf। खुली फ़ाइलों के लिए प्रति उपयोगकर्ता सीमा कहा जाता है nofile। आप इसे प्रत्येक उपयोगकर्ता के लिए या किसी विशेष उपयोगकर्ता या समूह के लिए सेट कर सकते हैं, और आप एक सीमा निर्धारित कर सकते हैं कि उपयोगकर्ता ओवरराइड (नरम सीमा) और दूसरा जो केवल रूट को ओवरराइड कर सकता है (हार्ड लिमिट)। प्रलेखन और limits.confआदमी पेज विवरण है। उदाहरण के लिए, सभी के लिए 50000 की सीमा बढ़ाने के लिए, इस लाइन को /etc/limits.conf(जब आप लॉग इन करते हैं तो सेटिंग प्रभावी हो जाती है):

* - nofile 50000

भीतर limits.confकरो * hard nofile 50000और / या * soft nofile 50000। मैं कठिन और नरम के बीच तकनीकी अंतर नहीं जानता और हमेशा दोनों किया है।
रॉन

उदाहरण के लिए tcsh का उपयोग करते हुए SLES 11.4 के भीतर, कोई limit descriptors 50000दिए गए टर्मिनल विंडो / सत्र के भीतर मान को बदलने के लिए कर सकता है ।
रॉन

दूसरे स्तंभ में @ron -` नरम और कठोर दोनों सीमाएँ निर्धारित करता है। यदि आप अलग-अलग मान चाहते हैं तो आपको केवल उन्हें अलग से सेट करना होगा। किसी भी समय ulimitकमांड चलाने से एक नरम सीमा को बदला जा सकता है (जिसे limitcsh कहा जाता है)। एक अनपेक्षित उपयोगकर्ता कभी भी हार्ड लिमिट से अधिक नहीं जा सकता है।
गिल्स एसओ- बुराई को रोकना '

अगर मैं केवल हार्ड सेट करता हूं, तो क्या सॉफ्ट वैल्यू डिफ़ॉल्ट रहती है? यदि मैं केवल सॉफ्ट सेट करता हूं और हार्ड नहीं है, तो क्या हार्ड डिफॉल्ट मान या स्वाभाविक रूप से समान सॉफ्ट वैल्यू रहता है? क्या मैं सॉफ्ट> हार्ड सेट कर सकता हूं? नरम वास्तविक मूल्य है जो प्रभाव में है? सवालों के लिए खेद है।
रॉन

@ एरन नरम सीमा स्वचालित रूप से हार्ड सीमा पर छाया हुआ है। यदि आप केवल हार्ड लिमिट सेट करते हैं, तो यह सॉफ्ट लिमिट को अधिकतम (default_soft_limit, real_hard_limit) पर सेट करता है।
गिल्स एसओ- बुराई को रोकना '

4

आप जोड़ सकते हैं fs.file-max = <your number>में /etc/sysctl.conf। फिर रिबूट करें।


cat / proc / sys / fs / file-max 169203 ys है, लेकिन ulimit -n 1024 है

रिबूट करने की आवश्यकता नहीं है। जरा दौड़ो sysctl fs.file-max=123456। ( /etc/sysctl.confबूट समय पर एक स्क्रिप्ट द्वारा पढ़ी जाती है जो sysctlसामग्री पर कॉल करती है।)
गिल्स एसओ- बुराई को रोकें '

3
ulimit -n

प्रति प्रक्रिया सेटिंग्स को संशोधित कर सकते हैं और

/proc/sys/fs/file-max

या sysctl वैरिएबल fs.file-maxको सिस्टम-वाइड मान को पढ़ने और सेट करने के लिए उपयोग किया जा सकता है


cat / proc / sys / fs / file-max 169203 ys है, लेकिन ulimit -n 1024 है

1

आप इसके लिए ulimit का उपयोग कर सकते हैं:

http://bloggerdigest.blogspot.com/2006/10/purpose-of-ulimit-linux-command.html

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


1
मैं बहुत सारे ग्राहकों से जुड़ना चाहता हूं

1

कार्यक्रम उदाहरण के अनुसार अलिमेट (बैश कमांड - मैन बैश या अपने शेल के समान खोजें) का उपयोग करें। वैश्विक प्रणाली सीमा का उपयोग न करें यदि आप नहीं जानते कि आप क्या कर रहे हैं - संभव DoS।


एसएलईएस 11.4 में मैंने 100000 सफलतापूर्वक स्थापित nofileकिया limits.confहै। मैं पुष्टि कर सकता हूं कि एसएसएच के साथ बाद में लॉग इन को रोकने के लिए बहुत बड़ा मान सेट करना और सिस्टम को पुनर्प्राप्त करने के लिए मुझे उस मान को सीमा में सही करने के लिए डीवीडी से बूट करना होगा।
रॉन

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