Jenkins PHPUnit et too many open files
Je me suis mis en place un serveur d'intégration continue pour mes projets PHP, avec Jenkins, sous Ubuntu. J'utilise, pour accélérer les tests, PHP7 et phpDbg pour les rapports sur la couverture du code.
Le problème est qu'assez rapidement, on arrive sur l'erreur "Too many open files" qui fait planter les tests.
Voici la petite recette que j'ai trouvée en cherchant un peu. Éditer le fichier /etc/security/limits.conf et ajouter les lignes suivantes :
jenkins soft nofile 64000
jenkins hard nofile 64000
64000 est là à titre d'exemple, il ne faut pas hésiter à mettre d'autres valeurs. Cette modification permet d'augmenter le nombre de fichiers ouverts simultanément par un utilisateur... Pour que ce fichier soit pris en compte, il faut se déconnecter puis se reconnecter. Ça permet, par exemple, d'essayer avec l'utilisateur "jenkins" de lancer directement les tests unitaires. Pour ce faire, je me connecte en tant qu'utilisateur normal, puis je fais "sudo su" pour passer root, puis "su jenkins" pour devenir cet utilisateur. Par contre, ça ne résoud pas le problème lors de l'exécution d'un "job" : en effet, cette modification utilise pam, alors que les jobs Jenkins sont des démons qui n'utilisent pas pam.
Il faut donc éditer le fichier /etc/init.d/jenkins, chercher la ligne commençant par do_start() et ajouter dans le bloc suivant : "ulimit -n 64000". Ensuite redémarrer le service jenkins avec "sudo service jenkins restart" par exemple.
EDIT du 28 décembre 2017: Tout ça ne suffit pas pour les connexions "graphiques". Il faut aussi modifier /etc/systemd/user.conf et /etc/systemd/system.conf en ajoutant la ligne suivante :
DefaultLimitNOFILE=64000