Ulimit उपयोग की जाँच कैसे करें


29

क्या किसी दिए गए उपयोगकर्ता के लिए ulimits के उपयोग की जांच करने का कोई तरीका है? मुझे पता है कि आप किसी एकल प्रक्रिया के लिए जब आप इसे शुरू करते हैं या रनिंग करते समय एक शेल के लिए बदल सकते हैं, लेकिन मैं "मॉनिटर" करने में सक्षम होना चाहता हूं कि उपयोगकर्ता अपनी सीमाओं को मारने के लिए कितना करीब है। मैं एक bashस्क्रिप्ट लिखने की योजना बना रहा हूं जो वर्तमान उपयोग प्रतिशत के आंकड़ों की रिपोर्ट करेगा। विशेष रूप से, मैं ट्रैक करना चाहता हूं:

  1. खुली फाइलें ( ulimit -n)
  2. अधिकतम उपयोगकर्ता प्रक्रियाएं ( ulimit -u)
  3. लंबित संकेत ( ulimit -i)

मैं जो चाहता हूं वह उपयोग का प्रतिशत (0-100) है।


यदि आपके खाते की प्रक्रिया आपके कर्नेल में चालू है, तो आप अपने उपयोगकर्ताओं के बारे में विस्तृत उपयोग के आंकड़े एकत्र कर सकते हैं।
केसी

आप प्रक्रिया लेखांकन कैसे चालू करते हैं?
हज़रत

और यह कितना उपरि जोड़ता है?
हज़रत

जवाबों:


22

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

यदि आप विशिष्ट उपयोगकर्ता की प्रक्रिया आईडी (पीआईडी) जानते हैं, तो आप प्रत्येक प्रक्रिया के लिए सीमाएँ प्राप्त कर सकते हैं:

cat /proc/<PID>/limits

आप प्रत्येक PID के लिए खोली गई फ़ाइलों की संख्या प्राप्त कर सकते हैं:

ls -1 /proc/<PID>/fd | wc -l

और फिर Max open filesप्रतिशत प्राप्त करने के लिए बस दूसरे कमांड से ओपन फाइल डिस्क्रिप्टर की संख्या के साथ मूल्य की तुलना करें ।


8

कई असुविधाजनक विधियों और मानक उपकरणों द्वारा वर्तमान उपयोगकर्ता के खुले फ़ाइलों का प्रतिशत, खरीद और लंबित संकेतों का उत्पादन:

paste <(grep 'open files\|processes\|pending signals' /proc/self/limits | 
        cut -c27-38) \
      <(i=`whoami` ; lsof -u $i | tail -n +2 | awk {'print $9'} | wc -l; 
                     ps --no-headers -U $i -u $i u | wc -l ; 
                     ps -u $i -o pid= | xargs printf "/proc/%s/status\n" |
                                        xargs grep -s 'SigPnd' |
                                        sed 's/.*\t//' | paste -sd+ | bc ; ) |
while read a b ; do echo $((${b}00/a))%; done

मेरे सिस्टम पर आउटपुट:

59%
9%
0%

उन नंबरों को अच्छा मानते हुए, यह उत्तर दिखाता है कि यह शेल में किया जा सकता है, लेकिन शायद तब तक नहीं करना चाहिए, जब तक कि बहुत बेहतर शेल तरीके न हों। बल्कि, यह क्यू के साथ बेहतर होगा gcc, या python, आदि।


-4

उलिमिट्स प्रक्रियाओं के गुण हैं और बाल प्रक्रियाओं को विरासत में मिले हैं।

आप किसी अन्य प्रक्रिया के लिए सीमाएँ नहीं प्राप्त कर सकते।



1
आपको गलतफहमी लगती है कि UNIX कैसे काम करता है और कैसे lsof को इसका परिणाम मिलता है। lsof मान प्राप्त करने के लिए कर्नेल मेमोरी को पढ़ता है, कोई डॉक्यूमेंटेड इंटरफ़ेस नहीं है जो कि lsof द्वारा उपयोग किया जाता है, इसलिए आंतरिक कर्नेल डेटा संरचनाओं में मामूली बदलाव किए जाने पर भी lsof विफल हो जाएगा।
विद्वान

2
यह lsofअनुरक्षक के लिए सिरदर्द है , निश्चित। लेकिन एंड-यूज़र के लिए प्रासंगिक नहीं है। इस प्रश्न के संदर्भ में भी गलत है, क्योंकि यह विशेष रूप से लिनक्स के बारे में पूछ रहा है, जिसने दस्तावेज इंटरफेस ( man proc)।
गिल्स एसओ- बुराई को रोकें '

आप अनिर्दिष्ट इंटरफेस के बारे में बात कर रहे हैं जो इस मामले में नोटिस के बिना बदलाव के अधीन हैं।
विद्वान

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