Augmenter ulimit sur CentOS

18

Nous avons une boîte CentOS que j'essaie d'augmenter le nombre maximum de fichiers qu'un utilisateur peut ouvrir. Actuellement, quand je cours, ulimit -Snje reçois 1024et ulimit -Hndonne 4096. J'ai besoin de ce nombre vers 6000.

Dans /etc/sysctl.confj'ai mis fs.file-max = 100000. Dans /etc/security/limits.confj'ai l'ensemble suivant:

username soft nofile 6000
username hard nofile 65535

Je me suis déconnecté et reconnecté en tant que, usernamemais je ne vois toujours pas mes modifications. De quoi ai-je besoin pour changer cette valeur?

Tout ce que j'ai, /etc/security/limits.dc'est 90-nproc.conf. J'ai également veillé à ce que ulimit ne soit pas appelé dans mon .bash_profile ou .bashrc.

Lorsque je l'exécute, sysctl -pil crache les paramètres que je veux et montre la valeur fs.file-maxque je veux. Mais quand je cours ulimit -Sn, j'obtiens 1048. Si j'essaye de courir, sysctl --systemje reçois error: Unknown parameter "--system".

tubaguy50035
la source
Avez-vous essayé de redémarrer? Autant que je sache, ces paramètres sont lus lors du démarrage du système.
Kamil
Vous n'avez pas besoin d'un redémarrage pour cela.
Xavier Lucas

Réponses:

14

Pour forcer /etc/sysctl.confla relecture, exécutez sysctl -p.

Le fichier /etc/security/limits.confest lu par des shells de connexion et vous devez fermer les fenêtres de sessions actives si dans l'interface graphique. Pour les connexions à distance, il prend effet lors de la reconnexion.

Xavier Lucas
la source
1
Ran cela, ne voyant toujours pas de changements après une reconnexion.
tubaguy50035
@ tubaguy50035 fs.file-maxest le nombre maximum de fichiers ouverts sur le système. C'est une limite stricte et elle ne sera pas reflétée par les ulimitappels dans votre cas.
Xavier Lucas du
Ah d'accord. Ne devrais-je donc plus rencontrer trop de fichiers ouverts?
tubaguy50035
@ tubaguy50035 Non lié. C'est la limite stricte du système qui remplacera tout nombre ci-dessus dans limits.conf. Mais limits.conf est toujours ce qui est appliqué. Pourriez-vous essayer de définir les limites matérielles et logicielles avec ulimit directement dans une nouvelle session et voir si vous obtenez les mêmes maximums? Quelque chose semble remplacer votre configuration.
Xavier Lucas
Il indique que l'opération n'est pas autorisée. Dois-je donner à l'utilisateur l'accès à quelque chose? Je préfère que l'internaute ne dispose pas de privilèges root.
tubaguy50035
6

Comme l'a dit une autre affiche, vous devez avoir sysctl défini la valeur dans le noyau en cours d'exécution. Il existe plusieurs façons de définir la valeur sans redémarrer:

sysctl -p /etc/sysctl.conf
sysctl -w fs.file-max=100000
sysctl --system

À mon humble avis, la dernière méthode est la meilleure, car elle reproduit l'ordre dans lequel les paramètres seraient appliqués lors du démarrage (et donc si vous avez un conflit, cela deviendra apparent).

Remarque: je ne sais pas quelle version de CentOS vous utilisez, mais sur 7 au moins, j'ai rencontré un problème où si dracut reconstruit les initramfs pour une raison quelconque (comme lors de l'installation d'un nouveau module de noyau), il copiera le contenu de /etc/sysctl.* dans les initramfs, qui sera ensuite exécuté par systemd-sysctl pendant cette phase, même si vous supprimez plus tard ces entrées de /etc/sysctl.conf.

Dans mon environnement, j'ai édité le module systemd dracut pour exclure /etc/sysctl.* de cet environnement (car ces paramètres seront définis une fois que rootfs sera monté et que systemd-sysctl s'exécutera à nouveau). C'est juste un piège que vous pourriez rencontrer.

Boscoe
la source
Je suis sur CentOS 6.5. J'ai également mis à jour ma question avec les résultats de certaines de ces informations.
tubaguy50035