Frage Wo sind die voreingestellten ulimit-Werte? (Linux, Centos)


Ich habe zwei CentOS 5 Server mit nahezu identischen Spezifikationen. Wenn ich mich anmelde und mache ulimit -uAuf einer Maschine bekomme ich unlimitedund auf der anderen Seite bekomme ich 77824.

Wenn ich einen Cron wie:

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

Ich bekomme die gleichen Ergebnisse (unlimited, 77824).

Ich versuche herauszufinden, wo diese festgelegt sind, damit ich sie ändern kann. Sie sind in keinem meiner Profile festgelegt (.bashrc, /etc/profile, usw.). Diese würden Cron sowieso nicht beeinflussen) /etc/security/limits.conf (Das ist leer).

Ich habe Google durchforstet und bin sogar soweit gegangen grep -Ir 77824 /aber bis jetzt ist noch nichts passiert. Ich verstehe nicht, wie diese Maschinen mit unterschiedlichen Grenzen voreingestellt sein könnten.

Ich frage mich eigentlich nicht für diese Maschinen, aber für eine andere (CentOS 6) Maschine, die eine Grenze von hat 1024Das ist viel zu klein. Ich muss Cron-Jobs mit einem höheren Limit ausführen und die einzige Möglichkeit, wie ich das festlegen kann, ist im Cron-Job selbst. Das ist in Ordnung, aber ich würde es lieber systemweit einrichten, damit es nicht so hacky ist.

Danke für jede Hilfe. Dies scheint so zu sein, als ob es einfach sein sollte (NICHT).


Bearbeiten - Gelöst

Ok, ich habe das herausgefunden. Es scheint ein Problem mit CentOS 6 oder vielleicht meiner Maschinenkonfiguration zu sein. Auf der CentOS 5 Konfiguration kann ich einstellen /etc/security/limits.conf:

* - nproc unlimited

und das würde effektiv die Konten und Cron-Grenzen aktualisieren. Dies funktioniert jedoch nicht in meiner CentOS 6-Box. Stattdessen muss ich tun:

myname1 - nproc unlimited
myname2 - nproc unlimited
...

Und die Dinge funktionieren wie erwartet. Vielleicht funktioniert die UID-Spezifikation, aber der Platzhalter (*) ist definitiv nicht hier. Seltsamerweise funktionieren Wildcards für die nofile Grenze.

Ich würde immer noch gerne wissen, woher die Standardwerte tatsächlich kommen, weil diese Datei standardmäßig leer ist und ich nicht sehen konnte, warum ich unterschiedliche Standardwerte für die beiden CentOS-Boxen hatte, die identische Hardware hatten und vom selben Anbieter stammten .


32
2018-02-05 04:08


Ursprung


Hast du etwas in /etc/security/limits.d/? - Patrick
Nein, dieses Verzeichnis ist leer - nomercysir
Sie können die Antwort nach einer gewissen Wartezeit als tatsächliche Antwort posten. - sysadmin1138♦
Ich habe das mal irgendwo nachgeschlagen. Die Standardeinstellungen werden vom Kernel festgelegt. Teilweise fest codiert, teilweise abhängig von der verfügbaren Ramme. Ich denke, dass ich dies auf Oracle Metalink im Zusammenhang mit der Einrichtung von SLES10 für Oracle-DB 11.2 gefunden habe - Nils
Kann diese Frage als gelöst markiert werden?


Antworten:


Diese "Standard" -Grenzwerte werden angewendet von:

  • das Linux Kernel beim Bootzeit (zum init verarbeiten),
  • Erbe, von den Grenzen des Elternprozesses (bei fork(2) Zeit),
  • PAM  wenn die Benutzersitzung geöffnet wird (kann Kernel / vererbte Werte ersetzen),
  • das verarbeiten selbst (kann PAM & Kernel / vererbte Werte ersetzen, siehe setrlimit(2)).

Normale Benutzerprozesse können keine harten Grenzen setzen.

Der Linux-Kernel

Beim Booten legt Linux Standardgrenzwerte für die init Prozesse, die dann von allen anderen (Kinder-) Prozessen übernommen werden. Um diese Grenzen zu sehen: cat /proc/1/limits.

Zum Beispiel der Kernel-Standard für maximale Anzahl von Dateideskriptoren (ulimit -n) war 1024/1024 (weich, hart), und wurde angehoben zu 1024/4096 in Linux 2.6.39.

Der Standard maximale Anzahl von Prozessen du sprichst über ist auf ... begrenzt CA:

Total RAM in kB / 128

für x86-Architekturen (zumindest), aber Distributionen ändern manchmal die Standard-Kernel-Werte Überprüfen Sie Ihren Kernel-Quellcode zum kernel/fork.c, fork_init(). Das Limit "Anzahl der Prozesse" wird dort RLIMIT_NPROC genannt.

PAM

Normalerweise wird PAM zusammen mit einigen Modulen verwendet, um die Benutzerauthentifizierung bei der Anmeldung zu gewährleisten (siehe /etc/pam.d/login).

Unter Debian gibt es das PAM-Modul, das für das Setzen von Limits zuständig ist: /lib/security/pam_limits.so.

Diese Bibliothek liest ihre Konfiguration aus /etc/security/limits.conf und /etc/security/limits.d/*.conf, aber selbst wenn diese Dateien leer sind, pam_limits.so könnte fest codierte Werte verwenden das können Sie im Quellcode überprüfen.

Zum Beispiel auf Debian die Bibliothek wurde gepatcht so dass standardmäßig maximale Anzahl von Prozessen (nproc) ist unbegrenzt, und die maximale Anzahl von Dateien (nofile) ist 1024/1024:

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

So, Überprüfen Sie den Quellcode Ihres CentOS PAM-Moduls (Suchen Sie nach RLIMIT_NPROC).

Beachten Sie jedoch, dass viele Prozesse nicht über PAM laufen (normalerweise, wenn sie nicht von einem angemeldeten Benutzer gestartet werden, wie z. B. Daemons und möglicherweise Cron-Jobs).


41
2018-03-06 15:38



Richtig, Punkt genommen, Kommentar entfernt. Ich würde sagen, dass PAM für die meisten Benutzer wahrscheinlich aktiviert ist, daher würde ich empfehlen, zuerst Ihre /etc/security/limits.conf und /etc/security/limits.d/* Dateien zu überprüfen. In dieser speziellen Instanz, auf die ich ebenfalls hingewiesen habe, gibt es ein 1024 Prozess / Gesamt-Benutzer-Thread-Limit, das standardmäßig in CentOS 6 über eine limits.d-Datei auferlegt wird. - rogerdpack
@rogerdpack Ja, PAM ist sicherlich aktiviert, aber, wie ich bereits in meiner Antwort sagte: "Bitte beachten Sie, dass viele Prozesse nicht durch PAM laufen (normalerweise, wenn sie nicht von einem eingeloggten Benutzer gestartet werden, wie Dämonen und vielleicht Cron) Arbeitsplätze)". Unsere Diskussion hat keinen Mehrwert. Wenn Sie also alle Ihre Kommentare löschen, werde ich meine löschen. Vielen Dank. - Totor
SuSE-Distributionen haben ulimit Paket, das zur Verfügung gestellt wurde /etc/initscript - "ein bequemer Ort zum Einstellen pro Prozessgrenzen", konfigurierbar über /etc/sysconfig/ulimit. - sendmoreinfo
Außerdem liest die Linux-PAM-Bibliothek die vom Kernel gesetzten Grenzen (d. h. /proc/1/limits) seit Version 1.1.4 (veröffentlicht 2011). - sendmoreinfo
@sendmoreinfo und was macht die Linux-PAM-Bibliothek mit den vom Kernel gesetzten Grenzen, abgesehen vom Lesen? - Totor


Auf RHEL6 (CentOS6) "max user processes" ist standardmäßig auf 1024 gesetzt.
Sie können diesen Wert in der Datei ändern:

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

Sehen https://bugzilla.redhat.com/show_bug.cgi?id=432903 wenn du dich beschweren willst :)


15
2017-10-04 08:46



Ich bezweifle, dass dieser 1024-Wert für nproc korrekt ist und der Autor sagte, dass das Limit.d-Verzeichnis leer war, so dass der Standardwert offensichtlich dort nicht definiert ist. - Totor
Totor kann nicht technisch mit dir streiten, aber Tom, ich fand es hilfreich, danke! - Partly Cloudy


Wenn Sie die Grenzwerte überprüft haben, haben Sie den Root-Benutzer dazu verwendet?

Von dem limits.conf Manpage:

HINWEIS: Gruppen- und Platzhalterbeschränkungen werden nicht auf den Benutzer root angewendet. Zu   Legen Sie eine Grenze für den Benutzer root fest, dieses Feld muss das Literal enthalten   Benutzername root.

Die Verwendung expliziter Benutzernamen würde das Problem in diesem Fall beheben.


3
2017-08-28 16:46



Sei vorsichtig, das ist wahrscheinlich ein Debian-spezifisch "Merkmal". - Totor
Auch die limits.conf Datei ist leer (als limits.d Verzeichnis). - Totor


Info dazu ist schrecklich im Internet, es gibt eine limits.conf-Datei, die ich für debian linux gemacht habe, mit allen möglichen Optionen und ihren maximalen "sicheren" Limits, die entsprechend angepasst werden.

Dies sind die höchsten Werte, die Sie festlegen können, einige Dinge sind ausgehebelt, aktivieren Sie diese Ursachen Fehler und können nicht in Ihre Konsole einloggen, ändern Sie die auskommentierten Optionen auf eigene Gefahr, aber Sie sollten nicht (Standard ist unbegrenzt auf den meisten)

Ich hoffe, dass dies für jemanden nützlich ist, da ich diese Information nirgends finden konnte, es gibt 4 Stunden Forschung zu dieser Datei.

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

3
2018-06-06 03:52





kernel / fork.c

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

Bei 64 Bit ist die Thread-Größe 8192

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

Jetzt bekomme ich die Summe in kb in Division durch 4

 echo $((8069352/4))
 2017338

Jetzt habe ich die Anzahl der Seiten

 echo $((8 * 8192 / 4096)
 16

Das Endergebnis ist

echo $((2017338/16))
126083

Auf diese Weise haben Sie den Parameter thread-max erhalten, und das standardmäßige Benutzerprozeßlimit ist die Hälfte

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

ulimit von der Wurzel

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

2
2017-12-20 00:13





Es scheint, /etc/security/limits.conf zu sein

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


1
2018-02-05 04:32



Das habe ich bereits in meinem Beitrag erwähnt. Es hat keine Wirkung, und diese Werte (unbegrenzt, 77824) werden auch nicht für die entsprechenden Maschinen gesetzt (diese Datei ist leer). - nomercysir
Oh, ich habe gesehen, dass du die .bashrc usw. überprüft hast, aber du hast nicht gesehen, dass du auch diese erwähnt hast. - Puddingfox


Es gibt eine weitere Möglichkeit, dass die Konfiguration für "noproc" nicht funktioniert, während Sie in /etc/security/limits.conf konfigurieren.

Es gibt noch eine weitere Datei, die Ihre Konfiguration /etc/security/limits.d/90-nproc.conf außer Kraft setzt.

* weiche nproc 1024
root soft nproc unbegrenzt

Hier überschreibt * config alles, was Sie in der vorherigen Konfigurationsdatei festgelegt haben. Im Idealfall konfigurieren Sie Ihre Einstellungen in dieser Datei.


1
2017-10-15 10:24