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 unlimited
et 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 1024
beaucoup 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 nofile
limite.
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. .
/etc/security/limits.d/
?Réponses:
Ces limites "par défaut" sont appliquées par:
init
processus),fork(2)
heure),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
init
processus, 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:
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.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, 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: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).
la source
/etc/initscript
- "un endroit pratique pour ajuster les limites par processus", configurable via/etc/sysconfig/ulimit
./proc/1/limits
) depuis la version 1.1.4 (publiée en 2011).Sur RHEL6 (CentOS6), "processus utilisateur max." Est défini par défaut sur 1024.
Vous pouvez changer cette valeur dans le fichier:
Voir https://bugzilla.redhat.com/show_bug.cgi?id=432903 si vous souhaitez vous plaindre à ce sujet :)
la source
Lorsque vous avez vérifié les limites, utilisiez-vous l'utilisateur root pour le faire?
De la
limits.conf
page de manuel:L'utilisation de noms d'utilisateur explicites résoudrait le problème dans ce cas.
la source
limits.conf
fichier est vide (en tant quelimits.d
répertoire).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.
la source
noyau / fork.c
La taille du fil 64 bits est 8192
Maintenant, je reçois le total en ko en division par 4
Maintenant, j'ai le nombre de pages
Le résultat final est
De cette façon, vous obtenez le paramètre thread-max et la limite de processus utilisateur par défaut est de moitié.
ulimit de la racine
la source
Il semble que ce soit /etc/security/limits.conf
http://ss64.com/bash/limits.conf.html
la source
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.
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.
la source