डेबियन पर बहुत सारी खुली फाइलें


15

मेरे पास डेबियन में लंबे समय से प्रक्रिया चल रही है। किसी त्रुटि को फेंकने के कुछ बिंदु पर:

बहुत सारी खुली हुई फाइलें।

चल रहा है:

ulimit -a

दिखाता है:

खुली फाइलें (-n) 1024

मैं 2 गुना खुली फाइलों की संख्या बढ़ाना चाहता हूं। निष्पादन के बाद

ulimit -n 2048

सीमा मेरे सत्र के अंत तक सक्रिय है, जो कार्य के लिए लागू नहीं है।

मैं स्थायी रूप से खुली फ़ाइलों की संख्या कैसे बढ़ा सकता हूं?

जवाबों:


12

यदि आपकी प्रक्रिया एक स्क्रिप्ट के माध्यम से शुरू की जाती है, तो आप कॉल को स्क्रिप्ट को निष्पादित करने से ठीक पहले स्क्रिप्ट में ulimit पर रख सकते हैं।

यदि आप अपने उपयोगकर्ता के लिए, या सभी उपयोगकर्ताओं के लिए ulimit को बढ़ाना चाहते हैं, तो आप pam_limitsलॉगिन के माध्यम से लागू की गई सीमाएँ निर्धारित कर सकते हैं । इनमें स्थापित हैं /etc/security/limits.conf। आपके मामले में, आप कुछ ऐसा कर सकते हैं:

*               hard    nofile             2048

ध्यान दें कि "हार्ड" एक कठिन सीमा को दर्शाता है - एक जिसे पार नहीं किया जा सकता है, और उसे बदला नहीं जा सकता है। एक नरम सीमा को एक उपयोगकर्ता द्वारा बदला जा सकता है (उदाहरण के लिए बिना रूट क्षमताओं वाला कोई व्यक्ति), लेकिन हार्ड सीमा से परे नहीं।

limits.confउपयोग करने के बारे में अधिक जानकारी के लिए पढ़ें pam_limits


सीमा पर विश्वास है कि मेरे पास 2 लाइनें हैं: * नरम नोफाइल 4096 * हार्ड नोफाइल 8192 जिसका कोई प्रभाव नहीं है।
फॉक्सबायो

और आपने इनका परीक्षण करने के बाद से लॉग आउट किया है? इसका मतलब X / GNOME / KDE आदि से सही लॉगिंग होगा, यदि आप एक स्थानीय मशीन पर यह कोशिश कर रहे हैं
डैनियल लॉसन

हाँ। /etc/security/limits.conf मेरे लिए काम नहीं करता है। मैं दूसरे दृष्टिकोण की कोशिश करूँगा।
फॉक्सबायो

3
/etc/security/limits.conf केवल उन सेवाओं के लिए काम करता है जो pam और pam मॉड्यूल pam_limits का उपयोग करते हैं (देखें /etc/pam.d/ प्रत्येक सेवा के PAM कॉन्फ़िगरेशन के लिए और / विशेष रूप से /etc/pam.d.d असामान्य-*) । यह इस प्रकार sshd, gdm, login इत्यादि द्वारा बनाए गए सभी उपयोगकर्ता-सत्रों की चिंता करता है। यह बूट-टाइम पर शुरू किए गए सभी कार्यक्रमों की चिंता नहीं करता है ...
Raphaël Hertzog

मैंने उस प्रभाव के बारे में कुछ कहा, लेकिन इसे स्पष्ट करने के लिए धन्यवाद। ओपी ने स्पष्ट नहीं किया है कि यह एक सेवा है या एक प्रक्रिया है जो उसका उपयोगकर्ता चला रहा है।
डेनियल लॉसन

13

कर्नेल में सेट की गई फ़ाइलों की "कुल अधिकतम" भी है, आप वर्तमान सेटिंग की जांच कर सकते हैं:

cat /proc/sys/fs/file-max 

और इसके साथ एक नया मान सेट करें:

echo "104854" > /proc/sys/fs/file-max

यदि आप रिबूट जोड़ के बीच के विन्यास को रखना चाहते हैं

sys.fs.file-max=104854

सेवा

/etc/sysctl.conf

वर्तमान अधिकतम फ़ाइल उपयोग की जांच करने के लिए:

[root@srv-4 proc]# cat /proc/sys/fs/file-nr
3391    969     52427
|        |       |
|        |       |
|        |       maximum open file descriptors
|        total free allocated file descriptors
total allocated file descriptors
(the number of file descriptors allocated since boot)


मेरा कुछ अश्लील नंबर यहाँ दिखाया गया है 49152 0 18446744073709551615 :। मुझे समझ नहीं आता कि पहले दो कॉलम तीसरे में क्यों नहीं जुड़ते। और अगर मेरे पास 1.8 ट्रिलियन ट्रिलियन हैं जो उपलब्ध हैं, तो मैं नहीं देखता कि मैंने उन सभी का उपयोग कैसे किया।
mlissner

4

जैसा कि दूसरों ने कहा है कि आप प्रति उपयोगकर्ता या समूह में /etc/security/limits.conf में विशिष्ट सीमाएँ लागू कर सकते हैं।

नोट: ulimit -n नरम सीमा दिखाता है।

ulimit -H -n 

आपको कठिन सीमा दिखाएगा।

यह ulimit -a और ulimit -n आउटपुट को काफी भ्रमित करता है यदि उदाहरण के लिए, आप 1024 से 4096 तक फ़ाइलों की संख्या बढ़ा रहे थे, जैसा कि आप हार्ड लिमिट आउटपुट को देखने की उम्मीद करेंगे, लेकिन आप अभी भी 1024 देख रहे हैं, जो सॉफ्ट है सीमा।

यह भी याद रखें कि ये सीमाएँ प्रति लॉगिन लागू होती हैं, इसलिए नए शेल में पुनः लॉगिन करें और अपने परिवर्तनों की जाँच करें, उनसे मौजूदा लॉगिन के प्रचारित होने की अपेक्षा न करें।


2

ध्यान रखें कि यदि आप / -cc/security/limits.conf में स्टार्ट-स्टॉप-डेमन सेटिंग ulimits द्वारा अपनी प्रक्रिया चलाते हैं तो काम नहीं करता है। यदि आप उदाहरण के लिए टोमेट के लिए खुली फ़ाइल सीमा को 20000 तक बढ़ाना चाहते हैं, तो आपको इन्हें इन पंक्तियों में जोड़ना होगा /etc/default/tomcat:

ulimit -Hn 32768
ulimit -Sn 32768

मुझे डेबियन 6.0.4 पर इस समस्या का सामना करना पड़ा। अन्य प्रक्रिया के लिए दिए गए उत्तरों में मदद करनी चाहिए।


1

यह इस बात पर निर्भर करता है कि आप अपनी लंबी चलने वाली प्रक्रिया कैसे शुरू करते हैं। यदि यह बूट समय (/etc/rcX.d/* स्क्रिप्ट के माध्यम से) पर शुरू हुआ है, तो आपको अपनी स्टार्टअप स्क्रिप्ट में एक एलिमिनेट कॉल डालनी होगी क्योंकि डिफ़ॉल्ट सीमा कर्नेल द्वारा निर्धारित की जाती है और इसे पुनः स्थापित किए बिना यह ट्यून करने योग्य नहीं है।

/etc/security/limits.confयदि आप cronइसे इस तरह से एक प्रविष्टि के साथ उदाहरण के लिए शुरू करने के लिए उपयोग करते हुए काम कर सकते हैं :

@reboot $HOME/bin/my-program

यह काम करना चाहिए क्योंकि /etc/pam.d/cron pam_limits.so को सक्षम करता है।


-1

आप इसे /etc/security/limits.conf में जोड़ सकते हैं

root soft nofile 100000
root hard nofile 100000

फिर सहेजें रिबूट।


3
क्या यहाँ कुछ नया है जो इस 5 वर्षीय प्रश्न के स्वीकृत उत्तर में नहीं है?
एंड्रयू शुलमैन

-2

एक बहुत अच्छी कमांड है, ulimit -nलेकिन बहुत सारे कनेक्शन और बहुत सारी खुली फाइलों के साथ एक समस्या है:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 519357
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

मैंने आपके उत्तर को साफ़ करने की कोशिश की लेकिन मैं अभी भी स्पष्ट नहीं हूँ कि आप मूल पोस्टर प्रश्न को क्या कहना चाह रहे हैं। क्या आप इसे और आगे बढ़ाने की कोशिश कर सकते हैं?
SLM

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