एक चल रही प्रक्रिया पर अधिकतम फ़ाइल सीमा निर्धारित करें


27

मेरे पास एक लंबी चलने वाली प्रक्रिया है जो अंततः अधिकतम खुली फ़ाइल सीमा को हिट करने वाली है। मुझे पता है कि कैसे असफल होने के बाद इसे बदलना है, लेकिन क्या कमांड लाइन से, चलने की प्रक्रिया के लिए इसे बदलने का एक तरीका है?

जवाबों:


28

CentOS / RHEL पर नए कर्नेल (2.6.32+) पर आप इसे रनटाइम पर / proc / <pid> / सीमाओं के साथ बदल सकते हैं:

cd /proc/7671/
[root@host 7671]# cat limits  | grep nice
Max nice priority         0                    0                    
[root@host 7671]# echo -n "Max nice priority=5:6" > limits
[root@host 7671]# cat limits  | grep nice
Max nice priority         5                    6                    

वह नियम! पता नहीं था कि आप सीमा फ़ाइल में लिख सकते हैं।
15'12

4
ubuntu 12.04
पोमा

5
यह मेरे 3.2 कर्नेल पर काम नहीं करता है । मुझे लगता है कि आपके वितरण में इसके लिए एक विशिष्ट अनौपचारिक पैच है क्योंकि मुझे कर्नेल के एफएस / प्रोक / बेस सी में इस पैच का कोई निशान नहीं दिखता है
Totor

हो सकता है ... मुझे पता है कि यह RHEL / CentOS गुठली में मौजूद है। यह डेबियन गुठली में मौजूद नहीं लगता है।
सिग-आईओ

2
'setprlimit' भविष्य का प्रमाण और अनुशंसित तरीका है, अगला उत्तर देखें
Sig-IO

26

जैसा कि यहाँ प्रलेखित है , prlimitकमांड-यूज़-लाइनक्स २.२१ के साथ पेश किया गया है जो आपको चल रही प्रक्रियाओं की सीमाओं को पढ़ने और बदलने की अनुमति देता है।

यह लिखने योग्य के लिए एक अनुवर्ती है /proc/<pid>/limits, जिसे मेनलाइन कर्नेल में एकीकृत नहीं किया गया था। यह समाधान काम करना चाहिए।

यदि आपके पास prlimit(1)अभी तक नहीं है , तो आप prlimit(2)मैनपेज में एक न्यूनतर संस्करण के लिए कोड पा सकते हैं ।


2
मेन्यू में न्यूनतम संस्करण के लिए +1!
टोटोर डे

चेतावनी: यदि आप एक सीमा का सामना करने के बाद "नोलिमिट" को बदलते हैं तो "मेमकाटेड" सेगफॉल्ट होगा। हमेशा लेखन योग्य सीमाओं का उपयोग करने के लिए एक अच्छा विचार नहीं है
जॉन


2

आप man ulimit-n विकल्प के साथ अलिमित करने का प्रयास कर सकते हैं, हालांकि मैग पेज अधिकांश ओएस को सेट करने की अनुमति नहीं देता है।

आप सिस्टम वाइड फाइल डिस्क्रिप्शन की सीमा का उपयोग कर सेट कर सकते sysctl -w fs.file-max=Nहैं और बदलाव को जारी रख सकते हैं/etc/sysctl.conf

हालाँकि, मैं यह देखने के लिए प्रक्रिया को देखने का सुझाव दूंगा कि क्या वास्तव में किसी निश्चित समय में इतनी सारी फाइलें होनी चाहिए, और यदि आप वास्तव में कुछ फाइलों को बंद कर सकते हैं और इस प्रक्रिया में अधिक कुशल हो सकते हैं।


खुली फ़ाइल चीज़ बग है, लेकिन मैं इसका पता नहीं लगा सका हूं। जबकि मैं ऐसा करना पसंद करता हूं, समय-समय पर उत्पादन मध्य-दिवस में क्रैश हो जाता है।
कागवी

ulimitरनिंग प्रक्रियाओं के लिए सेटिंग लागू नहीं करता है
-कैच-अंत में

0

यदि ऐसा करने के लिए प्रोग्राम किया जाता है (या यदि आप इसे हैक करने का प्रबंधन करते हैं) तो प्रक्रिया अपनी स्वयं की नरम सीमा बदल सकती है, लेकिन जब तक कि CAP_SYS_RESOURCE क्षमता नहीं है, तब तक यह अपनी हार्ड सीमा नहीं बढ़ा सकता है। आप रनटाइम में सीमाओं का निरीक्षण कर सकते हैं /proc/$pid/limits

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