Modifier la limite de fichiers sur ubuntu 16.x pour nginx et fpm

Le système de gestion des limites a évolué et utiliser /etc/security/limits.conf n’est plus valide sur ubuntu 16 car le système de gestion de service est maintenant basé sur systemd.

Le plus frustrant c’est qu’à première vue rien a changé : dans /etc/init.d/ on retrouve nos scripts de lancement classique mais effectivement on observe un if systemd qui peux mettre la puce à l’oreille. En effet, l’installateur de paquet a fait son travail et a mis en place les fichiers de service compatible avec systemd. Il faut donc aller voir du côté de  /etc/systemd/system/multi-user.target.wants pour trouver nos services fpm et nginx.

# ll /etc/systemd/system/multi-user.target.wants
total 8
drwxr-xr-x 2 root root 4096 Jan 29 17:27 ./
drwxr-xr-x 13 root root 4096 Jun 13 2017 ../
[...]
lrwxrwxrwx 1 root root 33 Jun 15 2016 nginx.service -> /lib/systemd/system/nginx.service
lrwxrwxrwx 1 root root 38 Nov 29 2016 php7.0-fpm.service -> /lib/systemd/system/php7.0-fpm.service
[...]

Ensuite c’est assez simple, il suffit d’ajouter la limitation de fichiers dans le service nginx ou fpm:

LimitNOFILE=30000

Voici le service complet pour php7.0-fpm:

[Unit]
Description=The PHP 7.0 FastCGI Process Manager
After=network.target

[Service]
Type=notify
PIDFile=/run/php/php7.0-fpm.pid
ExecStartPre=/usr/lib/php/php7.0-fpm-checkconf
ExecStart=/usr/sbin/php-fpm7.0 --nodaemonize --fpm-config /etc/php/7.0/fpm/php-fpm.conf
ExecReload=/usr/lib/php/php7.0-fpm-checkconf
ExecReload=/bin/kill -USR2 $MAINPID
LimitNOFILE=30000

[Install]
WantedBy=multi-user.target

idem pour la limitation dans une session ssh. Le /etc/security/limits.conf n’a pas d’effet, j’ai donc forcé la limitation en ajoutant directement un ulimit dans le /etc/bash.bashrc :

ulimit -n 30000

Attention ceci s’appliquera à tous les utilisateurs, assurez-vous que c’est acceptable dans votre cas d’utilisation.

Publié par Chrystophe Vergnaud

La vie est un jeu et je joue avec des 0 et des 1 depuis 25 ans. Compiler du kernel et comprendre son code source, faire tourner une solution comme une horloge, c'est ça qui m'amuse. La techno utilisée m'importe peu, elle change tous les ans mais les fondamentaux sont toujours là !

Laisser un commentaire