J'ai récemment vérifié l'un de nos processus de Redis à ce que Ulimits où l'application utilise:
cat /proc/<redis-pid>/limits
Et a été surprise pour apprendre que cela était à la faible valeur par défaut:
Limit Soft Limit Hard Limit
Max open files 4016 4016
J'étais surpris, car nous avons les suivants configurés:
# /etc/sysctl.conf
fs.file-max = 100000
.
# /etc/security/limits.conf
* soft nofile 100000
* hard nofile 100000
.
# /etc/ssh/sshd_config
UsePAM yes
.
# /etc/pam.d/sshd
session required pam_limits.so
Quelqu'un peut-il me dire pourquoi l'augmentation de Ulimit n'est pas appliquée au processus d'exécution de Redis?
Le processus REDIS fonctionne comme l'utilisateur 'Redis', le serveur a été redémarré car les limites ont été augmentées. Nous sommes sur la pression de Debian.
Dans Linux Les limites de ressources peuvent être définies dans divers endroits basés sur le type d'exigence.
/etc/security/limits.conf
déposer./etc/sysctl.conf
déposer.ulimit
commande/etc/security/limits.conf
fait partie de pam_limites et les limites définies dans ce fichier sont lues par module PAM_LIMITS lors de sessions de connexion. La session de connexion peut être par ssh
ou via terminal
. Et pam_limits n'affectera pas les processus de démon comme mentionné ici .
/etc/sysctl.conf
est une configuration globale globale du système, nous ne pouvons pas définir ici de configuration spécifique à l'utilisateur ici. Il définit la quantité maximale de ressources pouvant être utilisée par tous les utilisateurs/processus mis à la réunion.
ulimit
_ La commande est utilisée pour définir les limites de la coque. Et donc quand une limite est définie avec ulimit
sur une coquille, le processus qui est généré à partir de la coquille obtient cette valeur aussi à cause de la règle que le child process
hérite le parent processes
Propriétés.
Et ainsi pour votre cas, comme le redis
est démarré dans le cadre de init
rien de ce qui précède vous aidera directement. La manière appropriée de cela est que, vous devez utiliser la commande ulimit
pour définir la nouvelle valeur dans le script init lui-même. Comme ci-dessous dans le script,
ulimit -n 100000
if start-stop-daemon --start --quiet --umask 007 --pidfile $PIDFILE --chuid redis:redis --exec $DAEMON -- $DAEMON_ARGS.
Il y a déjà un bug classé dans la liste de souhaits pour ajouter ulimit
fonctionnalité à start-stop-daemon
.
Vérifiez également la configuration redis
s'il existe un moyen de fournir des limites.
Le paramètre SYSCTL FS.FILE-MAX est une large limite de système globale, je ne pense pas que ce soit une bonne idée de définir ulimit la même valeur.
Si vous définissez Ulimit 100000 et dans SYSCTL.CONF 100000 aussi, un utilisateur peut bloquer le système.
Toute façon, parle de votre problème, vous neez pas sûr que votre système utilise pam_limits
man pam_limits
grep -i limit /etc/pam.d/*
Vous avez activé pam_limits pour sshd, mais cette commande est-elle exécutée d'une session SSH? Vous devrez peut-être ajouter la même ligne à /etc/pam.d/login
et/ou /etc/pam.d/su
et/ou /etc/pam.d/Sudo
.