varsayılan ulimit değerleri nerede ayarlanır? (linux, centos)


34

Neredeyse aynı özelliklere sahip iki adet CentOS 5 sunucum var. Giriş yaptığım ve yaptığım zaman ulimit -u, bir makinede unlimited, diğerinde anladım 77824.

Böyle bir cron çalıştırdığımda:

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

Aynı sonuçları alıyorum ( unlimited, 77824).

Bunların nerede olduğunu belirlemeye çalışıyorum ki onları değiştirebileyim. Onlar benim profillerin (herhangi dokunulmaz değildir .bashrc, /etc/profilevs.). Bunlar zaten cronu etkilemeyecek) ne de /etc/security/limits.conf(boş).

Google’ı araştırdım ve yapılacak kadar ileri gittim grep -Ir 77824 /, ancak şu ana kadar hiçbir şey çıkmadı. Bu makinelerin nasıl farklı sınırlarla önceden ayarlanmış olabileceğini anlamıyorum.

Aslında bu makineler için değil 1024, çok küçük bir limiti olan farklı bir (CentOS 6) makine için merak ediyorum . Daha yüksek limitli cron işleri yapmam gerekiyor ve bunu nasıl ayarlayacağımı bilmenin tek yolu cron işinin kendisinde. Sorun değil, ama sistemi geniş tutmayı tercih ederdim, bu yüzden hack değil.

Herhangi bir yardım için teşekkürler. Bu kolay olmalı (değil) gibi görünüyor.


EDIT - ÇÖZÜLMÜŞ

Tamam, bunu anladım. CentOS 6 ile veya makine yapılandırmamla ilgili bir sorun gibi görünüyor. CentOS 5 yapılandırmasında şunları ayarlayabilirim /etc/security/limits.conf:

* - nproc unlimited

ve bu hesapları ve cron limitlerini etkili bir şekilde güncelleyecektir. Ancak bu, CentOS 6 kutumda çalışmıyor. Bunun yerine, yapmalıyım:

myname1 - nproc unlimited
myname2 - nproc unlimited
...

Ve işler beklendiği gibi çalışıyor. Belki UID spesifikasyonu çalışır, ancak joker karakter (*) kesinlikle burada YAPILMAZ. İşin garibi, joker karakterler DO için çalışıyor nofile.

Varsayılan değerlerin gerçekte nereden geldiğini bilmek isterim, çünkü varsayılan olarak bu dosya boş ve aynı donanıma sahip ve aynı sağlayıcıdan gelen iki CentOS kutusu için neden farklı varsayılanlar olduğunu göremedim. .


3
İçeride bir şey var /etc/security/limits.d/mı?
Patrick

Hayır, bu dir boş
nomercysir

1
Belirli bir bekleme süresinden sonra cevabı gerçek bir cevap olarak gönderebilirsiniz.
sysadmin1138

2
Bir zamanlar bunu bir yerlere baktım. Varsayılanlar çekirdek tarafından belirlenir. Kısmen sabit kodlanmış, kısmen mevcut ram'a bağlı. Ben 11.2 Oracle DB için SLES10 kurma bağlamında Oracle Metalink bulduk onu düşünüyorum
Nils

1
Bu soru çözüldü olarak işaretlenebilir mi?

Yanıtlar:


45

Bu "varsayılan" sınırlar şu şekilde uygulanır:

  • Linux çekirdeği de önyükleme zamanında (için initsüreç),
  • Kalıtım , ana süreç sınırlarından ( fork(2)zamanda),
  • Kullanıcı oturumu açıldığında PAM (çekirdek / kalıtsal değerleri değiştirebilir),
  • işlem kendisi (PAM çekirdek / kalıtsal değerleri yerine, bakınız setrlimit(2)).

Normal kullanıcıların süreçleri zor limitleri yükseltemez.

Linux çekirdeği

Önyükleme zamanında, Linux initdaha sonra tüm diğer (çocuklar) işlemler tarafından miras alınan süreç için varsayılan sınırları belirler . Bu sınırları görmek için: cat /proc/1/limits.

Örneğin, maksimum dosya tanımlayıcı sayısı ( ulimit -n) için çekirdek varsayılanı 1024/1024 (yumuşak, zor) idi ve Linux 2.6.39'da 1024/4096'ya yükseltildi .

Bahsettiğiniz varsayılan maksimum işlem sayısı yaklaşık olarak sınırlıdır :

Total RAM in kB / 128

x86 mimarileri (en azından), ancak dağılımlar için bazen o kadar, varsayılan çekirdek değerleri değiştirmek için çekirdek kaynak kodunu kontrol için kernel/fork.c, fork_init(). "İşlem sayısı" sınırı, burada RLIMIT_NPROC olarak adlandırılıyor.

PAM

Genellikle, oturum açma sırasında kullanıcı kimlik doğrulamasını sağlamak için, PAM bazı modüllerle birlikte kullanılır (bkz /etc/pam.d/login).

Debian, sınırlarını belirlemekle sorumlu PAM modülü buradadır: /lib/security/pam_limits.so.

Bu kütüphane, konfigürasyonunu /etc/security/limits.confve içinden okuyacaktır /etc/security/limits.d/*.conf, ancak bu dosyalar boş olsa bile, pam_limits.so kaynak kod içinde kontrol edebileceğiniz kodlanmış değerleri kullanabilir .

Örneğin, Debian, kütüphane yamalı olmuştur böylece varsayılan olarak, bu süreci sayısı ( nproc) sınırsızdır ve maksimum dosya sayısı ( nofile) 1024/1024 geçerli:

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

Bu yüzden, CentOS’un PAM modülü kaynak kodunu kontrol edin (RLIMIT_NPROC’a bakın).

Ancak, birçok işlemin PAM'den geçmeyeceğini lütfen unutmayın (genellikle, oturum açmış bir kullanıcı tarafından başlatılmadıysa, zindanlar ve belki de cron işleri gibi).


Doğru, puan alındı, yorum kaldırıldı. Sanırım çoğu kullanıcı için PAM muhtemelen etkindir, bu yüzden /etc/security/limits.conf ve /etc/security/limits.d/* dosyalarınızı kontrol etmenizi öneririm. Karşılaştığım bu özel örnekte, CentOS 6'da varsayılan olarak bir limit.d dosyasıyla uygulanan bir 1024 işlem / toplam kullanıcı iş parçacığı sınırı vardır.
rogerdpack 12:14

@rogerdpack evet, PAM kesinlikle etkin, ancak yine de cevabımda söylediğim gibi: "lütfen birçok işlemin PAM'den geçmeyeceğini unutmayın (genellikle, oturum açmış bir kullanıcı tarafından başlatılmadıysa, zindanlar ve belki cronlar gibi) Meslekler)". Tartışmamızın katma değeri yok, bu nedenle, tüm yorumlarınızı silerseniz, benimkini sileceğim. Teşekkür ederim.
Totor,

SuSE dağıtımları, "yapılandırılabilir işlem limitlerini ayarlamak için uygun bir yer" olan konfigüre edilebilen ulimit pakete sahiptir . /etc/initscript/etc/sysconfig/ulimit
sendmoreinfo

Ayrıca, Linux-PAM kütüphanesi, /proc/1/limitssürüm 1.1.4'ten (2011'den beri) çekirdek (yani ) tarafından belirlenen sınırları okur .
sendmoreinfo

@sendmoreinfo ve Linux-PAM kütüphanesi, çekirdeğin onları okumaktan ayrı olduğu sınırlarla ne yapar?
Totor

15

RHEL6'da (CentOS6) "maksimum kullanıcı işlemleri" varsayılan olarak 1024'e ayarlanmıştır.
Bu değeri dosyada değiştirebilirsiniz:

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

Şikayet etmek istiyorsanız https://bugzilla.redhat.com/show_bug.cgi?id=432903 adresine bakın :)


Nproc için bu 1024 değerinin doğru olduğundan şüpheliyim ve yazar limitlerinin düştüğünü söyledi, bu nedenle varsayılan değer burada açıkça tanımlanmadı.
Totor

Totor teknik olarak seninle tartışamaz ama Tom bunu çok faydalı buldum!
Parçalı Bulutlu

3

Sınırları kontrol ettiğinizde, bunu yapmak için kök kullanıcıyı mı kullanıyordunuz?

Gönderen limits.confman:

NOT: grup ve joker karakterler, kök kullanıcıya uygulanmaz. Kök kullanıcı için bir sınır belirlemek için, bu alan değişmez kullanıcı adı kökünü içermelidir.

Açık kullanıcı adlarının kullanılması bu durumda sorunu çözecektir.


Dikkatli olun, bu muhtemelen Debian'a özgü bir "özellik" dir.
Totor 6'13

Ayrıca, limits.confdosya ( limits.ddizin olarak) boştur .
Totor,

3

Bu konuda bilgi internette korkunç, debian linux için hazırladığım bir limit.conf dosyası var, tüm olası seçenekleri ve maksimum "güvenli" limitlerini gösteriyor, buna göre ayarlıyoruz.

Bunlar ayarlayabileceğiniz en yüksek değerlerdir, bazı şeyler karıştırılır, bunları aktif hale getirmeniz hataya sebep olur ve konsolunuza giriş yapamazsınız, yorumlanmış seçenekleri değiştirmek kendi sorumluluğunuzdadır, ancak yapmanız gerekmez (varsayılan sınırsızdır) çoğunda)

Umarım bu bilgileri herhangi bir yerde bulamıyorum, çünkü bu bilgiyi hiçbir yerde bulamadım, bu dosya üzerinde 4 saatlik bir araştırma var.

==== 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

Çekirdek / fork.c

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

64 bit Açık Konu boyutu 8192

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

Şimdi toplamı kb cinsinden 4 bölü

 echo $((8069352/4))
 2017338

Şimdi sayfa sayısını aldım

 echo $((8 * 8192 / 4096)
 16

Nihai sonuç

echo $((2017338/16))
126083

Bu şekilde thread-max parametresini aldınız ve varsayılan kullanıcı işlem sınırı yarısı

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

kökten ulimit

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


1

/Etc/security/limits.conf dosyasında yapılandırma yaparken "noproc" yapılandırmasının çalışmadığı bir başka olasılık daha var.

/Etc/security/limits.d/90-nproc.conf konfigürasyonunuzu geçersiz kılan bir dosya daha var.

* yumuşak nproc 1024
kök yumuşak nproc sınırsız

Burada * config, önceki config dosyasında ne ayarladıysanız geçersiz kılar. Yani ideal olarak ayarlarınızı bu dosyada yapılandırın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.