web-dev-qa-db-fra.com

où sont définies les valeurs ulimit par défaut? (linux, centos)

J'ai deux serveurs CentOS 5 avec des spécifications presque identiques. Lorsque je me connecte et que je ulimit -u, sur une machine j'obtiens unlimited, et sur l'autre j'obtiens 77824.

Quand je lance un cron comme:

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

J'obtiens les mêmes résultats (unlimited, 77824).

J'essaie de déterminer où ceux-ci sont définis afin de pouvoir les modifier. Ils ne sont définis dans aucun de mes profils (.bashrc, /etc/profile, etc.). Ceux-ci n'affecteraient pas le cron de toute façon) ni dans /etc/security/limits.conf (qui est vide).

J'ai parcouru Google et je suis même allé jusqu'à grep -Ir 77824 /, mais rien n'est arrivé jusqu'à présent. Je ne comprends pas comment ces machines auraient pu être prédéfinies avec des limites différentes.

Je me demande en fait non pas pour ces machines, mais pour une autre machine (CentOS 6) qui a une limite de 1024, ce qui est beaucoup trop petit. J'ai besoin d'exécuter des tâches cron avec une limite plus élevée et la seule façon de le définir est dans la tâche cron elle-même. C'est ok, mais je préfère le définir à l'échelle du système afin qu'il ne soit pas aussi hacky.

Merci pour toute aide. Cela semble être facile (PAS).


MODIFIER - RÉSOL

Ok, j'ai compris ça. Cela semble être un problème avec CentOS 6 ou peut-être la configuration de ma machine. Sur la configuration CentOS 5, je peux définir dans /etc/security/limits.conf:

* - nproc unlimited

et cela mettrait effectivement à jour les comptes et les limites de cron. Cependant, cela ne fonctionne pas dans ma boîte CentOS 6. Au lieu de cela, je dois faire:

myname1 - nproc unlimited
myname2 - nproc unlimited
...

Et les choses fonctionnent comme prévu. Peut-être que la spécification UID fonctionne, mais le caractère générique (*) NE FAIT PAS définitivement ici. Curieusement, les caractères génériques fonctionnent pour la limite nofile.

J'aimerais toujours savoir d'où viennent les valeurs par défaut, car par défaut, ce fichier est vide et je ne voyais pas pourquoi j'avais des valeurs par défaut différentes pour les deux boîtiers CentOS, qui avaient un matériel identique et provenaient du même fournisseur .

34
nomercysir

Ces limites "par défaut" sont appliquées par:

  • le noyau Linux à démarrage (au processus init),
  • héritage , des limites du processus parent (à fork(2) heure),
  • PAM lorsque la session utilisateur est ouverte = (peut remplacer le noyau/les valeurs héritées),
  • le processus lui-même (peut remplacer PAM & kernel/valeurs héritées, voir setrlimit(2)).

Les processus des utilisateurs normaux ne peuvent pas augmenter les limites strictes.

Le noyau Linux

Au démarrage, Linux définit des limites par défaut pour le processus init, qui sont ensuite héritées par tous les autres processus (enfants). Pour voir ces limites: cat /proc/1/limits.

Par exemple, la valeur par défaut du noyau pour nombre maximum de descripteurs de fichiers (ulimit -n) Était 1024/1024 (soft, hard), et a été augmenté à 1024/4096 sous Linux 2.6.39.

La valeur par défaut nombre maximal de processus dont vous parlez se limite à environ:

Total RAM in kB / 128

pour les architectures x86 (au moins), mais les distributions modifient parfois les valeurs par défaut du noyau, donc vérifiez votre code source du noyau pour kernel/fork.c, fork_init(). La limite "nombre de processus" y est appelée RLIMIT_NPROC.

PAM

Habituellement, pour assurer l'authentification des utilisateurs lors de la connexion, PAM est utilisé avec certains modules (voir /etc/pam.d/login).

Sur Debian, le module PAM responsable de la définition des limites est ici: /lib/security/pam_limits.so.

Cette bibliothèque lira sa configuration à partir de /etc/security/limits.conf Et /etc/security/limits.d/*.conf, Mais même si ces fichiers sont vides, pam_limits.so peut utiliser des valeurs codées en dur que vous pouvez vérifier dans le code source.

Par exemple, sur Debian, la bibliothèque a été corrigée de sorte que par défaut, le nombre maximum de processus (nproc) est illimité, et le nombre maximum de fichiers (nofile) est 1024/1024:

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

Donc, vérifiez le code source du module PAM de votre CentOS (recherchez RLIMIT_NPROC).

Cependant, veuillez noter que de nombreux processus ne passeront pas par PAM (généralement, s'ils ne sont pas lancés par un utilisateur connecté, comme les démons et peut-être les tâches cron).

46
Totor

Sur RHEL6 (CentOS6) "processus utilisateur max" est défini par défaut sur 1024.
Vous pouvez modifier cette valeur dans le fichier:

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

Voir https://bugzilla.redhat.com/show_bug.cgi?id=4329 si vous souhaitez vous plaindre :)

15
Tomas

Les informations à ce sujet sont terribles sur Internet, voici un fichier limits.conf que j'ai créé pour debian linux, montrant toutes les options possibles et leurs limites "sûres" maximales, Tweak en conséquence.

Ce sont les valeurs les plus élevées que vous pouvez définir, certaines choses sont hachées, l'activation de ces causes vous amène à l'erreur et vous ne pouvez pas vous connecter à votre console, modifiez les options commentées à vos risques et périls, mais vous ne devriez pas en avoir besoin (la valeur par défaut est illimitée sur la plupart)

J'espère que cela est utile à quelqu'un, car je n'ai pu trouver cette information nulle part, il y a 4 heures de recherche sur ce fichier.

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

Lorsque vous avez vérifié les limites, utilisiez-vous l'utilisateur root pour le faire?

Du limits.conf page de manuel:

REMARQUE: les limites de groupe et de caractère générique ne sont pas appliquées à l'utilisateur root. Pour définir une limite pour l'utilisateur root, ce champ doit contenir la racine du nom d'utilisateur littéral.

L'utilisation de noms d'utilisateur explicites résoudrait le problème dans ce cas.

3
Christopher Cashell

noyau/fork.c

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

Sur 64 bits, la taille du fil est 8192

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

Maintenant, je reçois le total en ko en division par 4

 echo $((8069352/4))
 2017338

Maintenant j'ai le nombre de pages

 echo $((8 * 8192 / 4096)
 16

Le résultat final est

echo $((2017338/16))
126083

De cette façon, vous avez obtenu le paramètre thread-max et la limite de processus utilisateur par défaut est la moitié

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

ulimit de la racine

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

Il existe une autre possibilité que la configuration de "noproc" ne fonctionne pas lors de la configuration dans /etc/security/limits.conf.

Il existe un autre fichier qui remplace votre configuration /etc/security/limits.d/90-nproc.conf.

 * soft nproc 1024 
 root soft nproc illimité 

Ici * config remplacera tout ce que vous avez défini dans le fichier de configuration précédent. Donc, idéalement, vous configurez votre paramètre dans ce fichier.

1
Suyash Jain

Il semble être /etc/security/limits.conf

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

1
jamesbtate