J'ai eu des problèmes avec notre nouveau serveur Redis après le passage d'Ubuntu 14.04 à 16.04. La configuration de la limite de fichiers ouverts en utilisant tous les guides dit de changer le fichier /etc/security/limits.conf avec les paramètres suivants
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
Et aussi à ajouter à /etc/pam.d/common-session et /etc/pam.d/common-session-noninteractive
session required pam_limits.so
J'ai apporté toutes ces modifications, mais redis est toujours en cours de démarrage avec une limite de fichiers de 4096 fichiers, nombre auquel le nombre de connexions atteint rapidement la charge de production.
Après de nombreuses recherches, j'ai finalement trouvé que systemd avait une limite standard de 4096 et quel que soit ce que vous définissez au niveau système, le niveau systemd aura toujours la priorité. Pour résoudre ce problème, modifiez la limite de fichiers ouverts dans systemd en modifiant /etc/systemd/system.conf et en ajoutant le paramètre suivant.
DefaultLimitNOFILE=65536
Il semble qu'il y ait beaucoup de paramètres par défaut dans systemd qui remplacent les paramètres système, il faut donc les définir dans systemd.
Donc, si cela peut être utile à des personnes, ce sont mes derniers paramètres pour un serveur Ubuntu 16.04 pour exécuter des redis de production.
Éditez /etc/systemd/system.conf (Sudo nano /etc/systemd/system.conf) et ajoutez
DefaultLimitNOFILE=65536
Éditez /etc/security/limits.conf (Sudo nano /etc/security/limits.conf) et ajoutez
* soft nofile 64000
* hard nofile 64000
root soft nofile 64000
root hard nofile 64000
Éditez /etc/pam.d/common-session (Sudo nano /etc/pam.d/common-session) et ajoutez
session required pam_limits.so
Éditez /etc/pam.d/common-session-noninteractive (Sudo nano /etc/pam.d/common-session-noninteractive) et ajoutez
session required pam_limits.so
Éditez /etc/rc.local (Sudo nano /etc/rc.local) et ajoutez
sysctl -w net.core.somaxconn=65535
Éditez /etc/sysctl.conf (Sudo nano /etc/sysctl.conf) et ajoutez
vm.overcommit_memory = 1
Éditez /etc/rc.local (Sudo nano /etc/rc.local) et ajoutez
echo never > /sys/kernel/mm/transparent_hugepage/enabled
Les valeurs sysctl net.core.somaxconn
et vm.overcommit_memory
sont associées à ulimit ou au nombre de fichiers ouverts . Elles concernent:
net.core.somaxconn
: limitera le nombre de connexions ouvertes mais non acceptées.vm.overcommit_memory
: la politique de surconsommation de mémoire lorsque la mémoire physique est épuisée.Si votre problème concerne la limite de fichiers ouverts (ce que ulimit -Sn/-Hn
gère), je ne recommanderais pas de jouer avec cela, à moins que vous ne sachiez exactement ce que vous faites.