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

34

J'ai deux serveurs CentOS 5 avec des spécifications presque identiques. Lorsque je me connecte et que je me connecte ulimit -u, je reçois sur une machine unlimitedet sur l'autre 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ù ils sont installés pour pouvoir les modifier. Ils ne sont pas définies dans aucun de mes profils ( .bashrc, /etc/profile, etc.). Ceux-ci n'affecteront pas 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'à faire grep -Ir 77824 /, mais rien n'a été fait jusqu'à présent. Je ne comprends pas comment ces machines auraient pu être prédéfinies avec des limites différentes.

En fait, je me demande non pas pour ces machines, mais pour une machine différente (CentOS 6) qui a une limite de 1024beaucoup trop petite. Je dois exécuter des tâches cron avec une limite supérieure et le seul moyen de le définir réside dans le travail cron lui-même. Ce n'est pas grave, mais je préférerais que le système soit étendu afin qu'il ne soit pas aussi malicieux.

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


EDIT - RESOLU

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

* - nproc unlimited

et cela mettrait effectivement à jour les comptes et les limites 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 (*) N'EST certainement PAS ici. Curieusement, les jokers fonctionnent pour la nofilelimite.

J'aimerais toujours savoir d'où proviennent réellement les valeurs par défaut, car par défaut, ce fichier est vide et je ne vois 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. .

nomercysir
la source
3
Avez-vous quelque chose /etc/security/limits.d/?
Patrick
Non, ce
répertoire
1
Vous pouvez poster la réponse sous forme de réponse réelle après une certaine période d'attente.
sysadmin1138
2
J'ai déjà regardé ça quelque part. Les valeurs par défaut sont définies par le noyau. En partie codé en dur, en partie dépendant du bélier disponible. Je pense avoir trouvé ça sur Oracle Metalink dans le cadre de la configuration de SLES10 pour Oracle-DB 11.2
Nils le
1
Cette question pourrait-elle être marquée comme résolue?

Réponses:

45

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

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

Les processus des utilisateurs normaux ne peuvent pas dépasser les limites strictes.

Le noyau Linux

Au démarrage, Linux définit les limites par défaut du initprocessus, 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 le nombre maximal de descripteurs de fichier ( ulimit -n) était 1024/1024 (logiciel, disque) et a été augmentée à 1024/4096 dans Linux 2.6.39.

Le nombre maximal de processus par défaut dont vous parlez est limité à environ:

Total RAM in kB / 128

pour x86 architectures (au moins), mais les distributions parfois changer les valeurs par défaut du noyau, afin de vérifier le code source du noyau pour kernel/fork.c, fork_init(). La limite du "nombre de processus" s'appelle ici RLIMIT_NPROC.

PAM

Généralement, pour s’assurer de l’authentification de l’utilisateur lors de la connexion, PAM est utilisé avec certains modules (voir /etc/pam.d/login).

Sur Debian, le module PAM chargé de définir les limites est ici: /lib/security/pam_limits.so.

Cette bibliothèque lira sa configuration à partir de /etc/security/limits.confet /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, sous Debian, la bibliothèque a été corrigée afin que, par défaut, le nombre maximal de processus ( nproc) soit illimité et que le nombre maximal de fichiers ( nofile) soit de 1024/1024:

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

Donc, vérifiez votre CentOS » code source du module PAM (look pour 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).

Totor
la source
Certes, le point pris, commentaire supprimé. Je suppose que je dirais que pour la plupart des utilisateurs, PAM est probablement activé, je vous recommande donc de vérifier vos fichiers /etc/security/limits.conf et /etc/security/limits.d/* en premier. Dans ce cas particulier, que j'ai également rencontré, il existe une limite de 1024 processus / total d'utilisateurs imposée par défaut dans CentOS 6 via un fichier limits.d.
rogerdpack
@rogerdpack Oui, PAM est certes activé, mais encore une fois, comme je l’ai dit dans ma réponse: "notez 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 cron emplois)". Notre discussion n'a aucune valeur ajoutée. Par conséquent, si vous supprimez tous vos commentaires, je supprimerai les miens. Merci.
Totor
Les distributions SuSE ont le paquet ulimit qui fournit /etc/initscript- "un endroit pratique pour ajuster les limites par processus", configurable via /etc/sysconfig/ulimit.
sendmoreinfo
de plus, la bibliothèque Linux-PAM lit les limites définies par le noyau (c'est-à-dire /proc/1/limits) depuis la version 1.1.4 (publiée en 2011).
sendmoreinfo
@sendmoreinfo et que fait la bibliothèque Linux-PAM avec les limites définies par le noyau en dehors de leur lecture?
Totor
15

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

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

Voir https://bugzilla.redhat.com/show_bug.cgi?id=432903 si vous souhaitez vous plaindre à ce sujet :)

Tomas
la source
Je doute que la valeur 1024 pour nproc soit correcte et que l'auteur dise que son rép_impact.d était vide, donc la valeur par défaut n'est évidemment pas définie ici.
Totor
Totor ne peut pas discuter techniquement avec toi mais Tom j'ai trouvé ça utile donc merci!
Partiellement nuageux
3

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

De la limits.confpage de manuel:

REMARQUE: les limites relatives aux groupes et aux caractères génériques ne sont pas appliquées à l'utilisateur root. Pour définir une limite pour l'utilisateur root, ce champ doit contenir le nom d'utilisateur littéral root.

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

Christopher Cashell
la source
Attention, ceci est probablement une "fonctionnalité" spécifique à Debian .
Totor
En outre, le limits.conffichier est vide (en tant que limits.drépertoire).
Totor
3

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" maximum, modifiez-le en conséquence.

Ce sont les valeurs les plus élevées que vous pouvez définir, certaines choses sont hachées, les activer vous causera des erreurs et vous empêcherez de vous connecter à votre console, modifierez les options commentées à vos risques et périls, mais vous n’auriez pas besoin de le faire (valeur par défaut illimitée). sur la plupart)

J'espère que cela sera utile à quelqu'un, car je ne trouvais 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
XionicFire
la source
2

noyau / fork.c

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

La taille du fil 64 bits 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 obtenez le paramètre thread-max et la limite de processus utilisateur par défaut est de 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
c4f4t0r
la source
1

Il semble que ce soit /etc/security/limits.conf

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

jamesbtate
la source
1
Je l'ai déjà mentionné dans mon post. Il n'a pas d'effet, et ces valeurs (illimité, 77824) ne sont pas définies pour les machines respectives (ce fichier est vide).
Nomercysir
oh j'ai vu que vous avez vérifié le .bashrc etc. mais je n'ai pas vu que vous avez mentionné celui-ci aussi.
jamesbtate
1

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

Un autre fichier remplace la 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 vos paramètres dans ce fichier.

Suyash Jain
la source