डिफॉल्ट अलिमिट वैल्यूज़ कहाँ सेट की जाती हैं (linux, centos)


34

मेरे पास लगभग समान स्पेक्स के साथ दो CentOS 5 सर्वर हैं। जब मैं लॉगिन और करता हूं ulimit -u, तो एक मशीन मुझे मिलती है unlimited, और दूसरी मुझे मिलती है 77824

जब मैं एक क्रोन चलाता हूं:

* * * * * ulimit -u > ulimit.txt

मुझे वही परिणाम ( unlimited, 77824) मिलते हैं ।

मैं यह निर्धारित करने की कोशिश कर रहा हूं कि ये कहां सेट हैं ताकि मैं उन्हें बदल सकूं। वे मेरे प्रोफाइल (में से किसी में सेट नहीं हैं .bashrc, /etc/profile, आदि)। ये क्रोन को वैसे भी प्रभावित नहीं करेंगे) और न ही /etc/security/limits.conf(जो खाली है)।

मैंने Google को दस्त किया है और यहां तक ​​कि ऐसा करने के लिए चला गया है grep -Ir 77824 /, लेकिन अभी तक कुछ भी नहीं हुआ है। मुझे समझ में नहीं आ रहा है कि ये मशीनें विभिन्न सीमाओं के साथ कैसे पूर्व निर्धारित कर सकती हैं।

मैं वास्तव में इन मशीनों के लिए नहीं, बल्कि एक अलग (CentOS 6) मशीन के लिए सोच रहा हूं 1024, जिसकी सीमा बहुत कम है। मुझे क्रोन जॉब्स को एक उच्च सीमा के साथ चलाने की आवश्यकता है और एकमात्र तरीका मुझे पता है कि कैसे सेट करना है जो क्रोन जॉब में ही है। यह ठीक है, लेकिन मैं इसे व्यापक रूप से सिस्टम सेट करूंगा ताकि यह हैकी न हो।

किसी भी मदद के लिए धन्यवाद। ऐसा लगता है कि यह आसान होना चाहिए (नहीं)।


EDIT - SOLVED

ठीक है, मुझे यह पता चला। यह या तो CentOS 6 या शायद मेरी मशीन कॉन्फ़िगरेशन के साथ एक समस्या है। CentOS 5 कॉन्फ़िगरेशन पर, मैं इसमें सेट कर सकता हूं /etc/security/limits.conf:

* - nproc unlimited

और यह प्रभावी रूप से खातों और क्रोन सीमाओं को अद्यतन करेगा। हालाँकि, यह मेरे CentOS 6 बॉक्स में काम नहीं करता है। इसके बजाय, मुझे करना चाहिए:

myname1 - nproc unlimited
myname2 - nproc unlimited
...

और चीजें उम्मीद के मुताबिक काम करती हैं। शायद यूआईडी विनिर्देश काम करता है, लेकिन वाइल्डकार्ड (*) निश्चित रूप से यहां नहीं है। अजीब तरह से, वाइल्डकार्ड nofileसीमा के लिए काम करते हैं ।

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


3
क्या आपके पास कुछ है /etc/security/limits.d/?
पैट्रिक

नहीं, वह डायर खाली है
नॉमर्शिस्ट

1
आप एक निश्चित प्रतीक्षा अवधि के बाद उत्तर को वास्तविक उत्तर के रूप में पोस्ट कर सकते हैं।
sysadmin1138

2
मैंने एक बार यह कहीं देखा। डिफॉल्ट कर्नेल द्वारा निर्धारित किए जाते हैं। आंशिक रूप से कठोर-कोडित, आंशिक रूप से उपलब्ध राम पर निर्भर। मुझे लगता है कि मैंने ओरेकल मेटलिंक पर Oracle-DB 11.2 के लिए SLES10 स्थापित करने के संदर्भ में
Nils

1
क्या इस प्रश्न को हल के रूप में चिह्नित किया जा सकता है?

जवाबों:


45

ये "डिफ़ॉल्ट" सीमाएं इसके द्वारा लागू होती हैं:

  • लिनक्स कर्नेल में बूट समय (के लिए initप्रक्रिया),
  • वंशानुक्रम , मूल प्रक्रिया की सीमाओं से ( fork(2)समय पर),
  • PAM जब उपयोगकर्ता सत्र खोला जाता है (कर्नेल / विरासत में दिए गए मानों को बदल सकता है),
  • प्रक्रिया ही (पीएएम और कर्नेल / विरासत में मिला मूल्यों की जगह ले सकता, देख setrlimit(2))।

सामान्य उपयोगकर्ताओं की प्रक्रिया में कठोर सीमाएँ नहीं बढ़ सकती हैं।

लिनक्स कर्नेल

बूट समय पर, लिनक्स initप्रक्रिया के लिए डिफ़ॉल्ट सीमा निर्धारित करता है, जो तब अन्य सभी (बच्चों) प्रक्रियाओं द्वारा विरासत में मिला है। इन सीमाओं को देखने के लिए cat /proc/1/limits:।

उदाहरण के लिए, फ़ाइल डिस्क्रिप्टर ( ulimit -n) की अधिकतम संख्या के लिए कर्नेल डिफ़ॉल्ट 1024/1024 (सॉफ्ट, हार्ड) है, और लिनक्स 2.6.39 में 1024/4096 तक बढ़ा दिया गया है

डिफ़ॉल्ट प्रक्रियाओं की अधिकतम संख्या के बारे में आप बात कर रहे हैं के लिए सीमित है लगभग:

Total RAM in kB / 128

86 आर्किटेक्चर (कम से कम), लेकिन वितरण के लिए कभी कभी डिफ़ॉल्ट कर्नेल मान बदलते हैं, तो आपके कर्नेल स्रोत कोड की जांच के लिए kernel/fork.c, fork_init()। "प्रक्रियाओं की संख्या" सीमा को वहां RLIMIT_NPROC कहा जाता है।

पीएएम

आमतौर पर, लॉगिन पर उपयोगकर्ता प्रमाणीकरण सुनिश्चित करने के लिए, PAM का उपयोग कुछ मॉड्यूल (देखें /etc/pam.d/login) के साथ किया जाता है ।

डेबियन पर, सीमा तय करने के लिए जिम्मेदार PAM मॉड्यूल यहां है /lib/security/pam_limits.so:।

यह लाइब्रेरी इसके कॉन्फ़िगरेशन को पढ़ेगी/etc/security/limits.conf और /etc/security/limits.d/*.conf, लेकिन भले ही वे फ़ाइलें खाली हों, pam_limits.so हार्डकोड मानों का उपयोग कर सकते हैं जिन्हें आप स्रोत कोड के भीतर देख सकते हैं।

उदाहरण के लिए, डेबियन पर, लाइब्रेरी को पैच किया गया है ताकि डिफ़ॉल्ट रूप से, अधिकतम संख्या में प्रक्रियाएं ( nproc) असीमित हो, और फ़ाइलों की अधिकतम संख्या ( nofile) 1024/1024:

  case RLIMIT_NOFILE:
      pl->limits[i].limit.rlim_cur = 1024;
      pl->limits[i].limit.rlim_max = 1024;

तो, अपने CentOS 'PAM मॉड्यूल सोर्स कोड (RLIMIT_NPROC के लिए देखें) की जाँच करें।

हालांकि, कृपया ध्यान दें कि कई प्रक्रियाएं PAM के माध्यम से नहीं चलेंगी (आमतौर पर, यदि वे लॉग इन उपयोगकर्ता द्वारा लॉन्च नहीं किए जाते हैं, जैसे डेमन और शायद क्रॉन जॉब्स)।


सच, बिंदु लिया, टिप्पणी हटा दी गई। मुझे लगता है कि मैं कहूंगा कि अधिकांश उपयोगकर्ताओं के लिए, PAM संभवत: सक्षम है, इसलिए मैं पहले आपकी /etc/security/limits.conf और /etc/security/limits.d/* फ़ाइलों की जाँच करने की सलाह दूंगा। इस विशेष उदाहरण में, जिसे मैंने भी चलाया था, सेंटीओएस 6 में डिफ़ॉल्ट रूप से एक limit.d फ़ाइल के माध्यम से 1024 प्रक्रिया / कुल उपयोगकर्ता थ्रेड सीमा है।
रोज़गारपैक

@rogerdpack हाँ, PAM निश्चित रूप से सक्षम है, लेकिन, फिर से, जैसा कि मैंने अपने जवाब में कहा था: "कृपया ध्यान दें कि कई प्रक्रियाएं PAM से नहीं गुजरेंगी (आमतौर पर, यदि वे लॉग इन उपयोगकर्ता द्वारा लॉन्च नहीं किए जाते हैं, जैसे डेमॉन और हो सकता है कि क्रोन नौकरियों) "। हमारी चर्चा का कोई अतिरिक्त मूल्य नहीं है, इसलिए, यदि आप अपनी सभी टिप्पणियों को हटा देते हैं, तो मैं अपना डिलीट कर दूंगा। धन्यवाद।
टॉटर

SuSE वितरण में अल्मीट पैकेज है, जो प्रदान करता है /etc/initscript- "प्रति प्रक्रिया सीमाओं को समायोजित करने के लिए एक सुविधाजनक स्थान", विन्यास योग्य /etc/sysconfig/ulimit
sendmoreinfo

इसके अलावा, लिनक्स-पीएएम लाइब्रेरी /proc/1/limitsसंस्करण 1.1.4 (रिलीज़ 2011) के बाद से कर्नेल (यानी ) द्वारा निर्धारित सीमा को पढ़ता है ।
sendmoreinfo

@sendmoreinfo और लिनक्स-पीएएम पुस्तकालय कर्नेल द्वारा उन्हें पढ़ने के अलावा निर्धारित सीमाओं के साथ क्या करता है?
टोटोर

15

RHEL6 (CentOS6) पर "अधिकतम उपयोगकर्ता प्रक्रियाएं" डिफ़ॉल्ट रूप से 1024 पर सेट हैं।
आप इस मान को फ़ाइल में बदल सकते हैं:

/etc/security/limits.d/90-nproc.conf

अगर आप इसके बारे में शिकायत करना चाहते हैं तो https://bugzilla.redhat.com/show_bug.cgi?id=432903 देखें।


मुझे संदेह है कि nproc के लिए यह 1024 मान सही है और लेखक ने कहा कि इसकी सीमा। Dir खाली थी, इसलिए डिफ़ॉल्ट मान को स्पष्ट रूप से वहां परिभाषित किया गया है।
Totor

टोटर आपके साथ तकनीकी रूप से बहस नहीं कर सकता है, लेकिन टॉम मुझे यह मददगार लगा, इसलिए धन्यवाद!
आंशिक रूप से बादल छाए रहेंगे

3

जब आपने सीमाएं जांची थीं, तो क्या आप ऐसा करने के लिए रूट उपयोगकर्ता का उपयोग कर रहे थे?

से limits.confमैनपेज:

नोट: समूह और वाइल्डकार्ड सीमाएँ रूट उपयोगकर्ता पर लागू नहीं होती हैं। रूट उपयोगकर्ता के लिए एक सीमा निर्धारित करने के लिए, इस फ़ील्ड में शाब्दिक उपयोगकर्ता नाम रूट होना चाहिए।

स्पष्ट उपयोगकर्ता नाम का उपयोग इस मामले में समस्या को हल करेगा।


सावधान रहें, यह संभवतः एक डेबियन विशिष्ट "विशेषता" है।
टोट्र

इसके अलावा, limits.confफ़ाइल खाली है ( limits.dनिर्देशिका के रूप में )।
टोटर

3

इस पर जानकारी इंटरनेट पर भयानक है, एक सीमा के भीतर है। मैं debian linux के लिए बनाई गई फ़ाइल है, सभी संभव विकल्प और उनकी अधिकतम "सुरक्षित" सीमा दिखा रहा है, तदनुसार तदनुसार।

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

मुझे आशा है कि यह किसी के लिए उपयोगी है, क्योंकि मुझे यह जानकारी कहीं भी नहीं मिली, इस फाइल पर 4 घंटे का शोध है।

==== FILE START =====
# /etc/security/limits.conf
# 
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#- a user name
#- a group name, with @group syntax
#- the wildcard     *, for default entry
#- the wildcard %, can be also used with %group syntax,
#         for maxlogin limit
#- NOTE: group and wildcard limits are not applied to     root.
#  To apply a limit to the     root user, <domain> must be
#  the literal username     root.
#
#<type> can have the two values:
#- "soft" for enforcing the soft limits
#- "hard" for enforcing hard limits
#
#<item> can be one of the following:
#- core - limits the core file size (KB)
#- data - max data size (KB)
#- fsize - maximum filesize (KB)
#- memlock - max locked-in-memory address space (KB)
#- nofile - max number of open files
#- rss - max resident set size (KB)
#- stack - max stack size (KB)
#- cpu - max CPU time (MIN)
#- nproc - max number of processes
#- as - address space limit (KB)
#- maxlogins - max number of logins for this user
#- maxsyslogins - max number of logins on the system
#- priority - the priority to run user process with
#- locks - max number of file locks the user can hold
#- sigpending - max number of pending signals
#- msgqueue - max memory used by POSIX message queues (bytes)
#- nice - max nice priority allowed to raise to values: [-20, 19]
#- rtprio - max realtime priority
#- chroot - change     root to directory (Debian-specific)
#
#<domain>      <type>  <item>         <value>
#

#*               soft    core            0
#root            hard    core            100000
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#ftp             -       chroot          /ftp
#@student        -       maxlogins       4

# -- Defaults:
#(core) core file size                (blocks, -c) 0 (ulimit -Hc or -Sc)
#(data) data seg size                  (bytes, -d) unlimited
#(priority) scheduling priority               (-e) 0
#(fsize) file size                    (blocks, -f) unlimited
#(sigpending) pending signals                 (-i) 378197
#(memlock) max locked memory          (kbytes, -l) 64
# max memory size                     (kbytes, -m) unlimited
#(nofile) open files                          (-n) 65536
# pipe size                        (512 bytes, -p) 8
#(msgqueue) POSIX message queues       (bytes, -q) 819200
#(rtprio) real-time priority                  (-r) 0
#(stack) stack size                   (kbytes, -s) 8192
#(cpu) cpu time                      (seconds, -t) unlimited
#(nproc) max user processes                   (-u) 378197
# virtual memory                      (kbytes, -v) unlimited
#(locks) file locks                           (-x) unlimited

# --     root Limits:
root               -    core            -1
root               -    data            -1
root               -    fsize           -1
root               -    memlock         -1
root               -    nofile          999999
root               -    stack           -1
root               -    cpu             -1
root               -    nproc           -1
root               -    priority        0
root               -    locks           -1
root               -    sigpending      -1
root               -    msgqueue        -1
root               -    rtprio          -1
root               -    maxlogins       -1
root               -    maxsyslogins    -1
#root               -    rss             -1
#root               -    as              -1
#root               -    nice            0
#root               -    chroot          -1

#All Users:
# -- Hard Limits
*               hard    core            -1
*               hard    data            -1
*               hard    fsize           -1
*               hard    memlock         -1
*               hard    nofile          999999
*               hard    stack           -1
*               hard    cpu             -1
*               hard    nproc           -1
*               hard    priority        0
*               hard    locks           -1
*               hard    sigpending      -1
*               hard    msgqueue        -1
*               hard    rtprio          -1
*               hard    maxlogins       -1
*               hard    maxsyslogins    -1
#*               hard    rss             -1
#*               hard    as              -1
#*               hard    nice            0
#*               hard    chroot          -1

# -- Soft Limits
*               soft    core            -1
*               soft    data            -1
*               soft    fsize           -1
*               soft    memlock         -1
*               soft    nofile          999999
*               soft    stack           -1
*               soft    cpu             -1
*               soft    nproc           -1
*               soft    priority        0
*               soft    locks           -1
*               soft    sigpending      -1
*               soft    msgqueue        -1
*               soft    maxlogins       -1
*               soft    maxsyslogins    -1
*               soft    rtprio          -1
#*               soft    rss             -1
#*               soft    as              -1
#*               soft    nice            0
#*               soft    chroot          -1

#randomuser:
# -- Soft Limits
randomuser           soft    core            -1
randomuser           soft    data            -1
randomuser           soft    fsize           -1
randomuser           soft    memlock         -1
randomuser           soft    nofile          999999
randomuser           soft    stack           -1
randomuser           soft    cpu             -1
randomuser           soft    nproc           -1
randomuser           soft    priority        0
randomuser           soft    locks           -1
randomuser           soft    sigpending      -1
randomuser           soft    msgqueue        -1
randomuser           soft    maxlogins       -1
randomuser           soft    maxsyslogins    -1
randomuser           soft    rtprio          -1
#randomuser           soft    rss             -1
#randomuser           soft    as              -1
#randomuser           soft    nice            0
#randomuser           soft    chroot          -1

# End of file

2

कर्नेल / fork.c

max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE);

64 बिट पर थ्रेड का आकार 8192 है

 grep -i total /proc/meminfo 
 MemTotal:        8069352 kB

अब मैं विभाजन में kb में कुल 4 से प्राप्त करता हूं

 echo $((8069352/4))
 2017338

अब मुझे पृष्ठों की संख्या मिल गई

 echo $((8 * 8192 / 4096)
 16

अंतिम परिणाम है

echo $((2017338/16))
126083

इस तरह आपको थ्रेड-मैक्स पैरामीटर मिला और डिफ़ॉल्ट उपयोगकर्ता प्रक्रिया की सीमा आधी है

init_task.signal->rlim[RLIMIT_NPROC].rlim_cur = max_threads/2;
init_task.signal->rlim[RLIMIT_NPROC].rlim_max = max_threads/2;

जड़ से खत्म

ulimit -u
62932
echo $((62932*2))
125864 #we are near

1

यह /etc/security/limits.conf प्रतीत होता है

http://ss64.com/bash/limits.conf.html


1
मैंने अपनी पोस्ट में पहले ही इसका उल्लेख किया है। इसका कोई प्रभाव नहीं है, और न ही उन मूल्यों (असीमित, 77824) को संबंधित मशीनों के लिए सेट किया गया है (वह फ़ाइल खाली है)।
नामर्किर

ओह, मैंने आपको .bashrc आदि की जाँच करते हुए देखा था, लेकिन आपने यह भी नहीं देखा।
jamesbtate

1

एक और संभावना है कि /etc/security/limits.conf में कॉन्फ़िगर करते समय "noproc" के लिए कॉन्फ़िगरेशन काम नहीं कर रहा है।

एक और फ़ाइल है जो आपके कॉन्फ़िगरेशन /etc/security/limits.d/90-nproc.conf को ओवरराइड करती है।

* सॉफ्ट nproc 1024
रूट नरम nproc असीमित

यहां * कॉन्फिगरेशन जो भी आप पिछली कॉन्फिगर फाइल में सेट करेंगे उसे ओवरराइड करेंगे। तो आदर्श रूप से आप इस फाइल में अपनी सेटिंग को कॉन्फ़िगर करते हैं।

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