Failed to allocate ...

Failed to allocate ... jpp

Depuis quelques temps je constatais un message incongru lorsque je redémarrais Apache :

"Failed to allocate directory watch: Too many open files"

Cela n'empêchait pas Apache de redémarrer mais cela m'intriguais un peu. Après pas mal de recherches je suis tombé sur la variable vm.max_map_count qui est, selon de nombreuses sources positionnée trop bas en standard et qu'il faut augmenter sérieusement. J'utilise pourtant beaucoup de machines Linux et je n'ai jamais rencontré ce type de problème ? 
La valeur indiquée couramment est 262144 que j'ai un peu réduite et utilisée avec succès ci dessous.

J'avais essayé de "forcer" un peu les valeurs de "nofile" dans le fichier /etc/security/limits.conf 
mais sans aucun succès. 
Après quelques recherches j'ai trouvé la bonne (?) variable kernel, visible par la commande :

sysctl -a | grep max_map_count

qui me retournait :  vm.max_map_count = 65530

En "forçant" un peu (euphémisme) cette valeur à 131072 le message a disparu, mais la consommation mémoire semble avoir augmenté, et j'ai du "forcer" un peu sur la mémoire de la VM.

Il faut donc impérativement surveiller la quantité de mémoire utilisée après ce type de manipulation.

Cette variable a très souvent une valeur insuffisante, le défaut de 65000 semble "gêner" beaucoup d'applications telles que Docker, des bases de données .... Elasticsearch ... et divers autres logiciels. 
C'est la première fois que je tombe sur ce problème mais il semble assez courant au vu du nombre de mentions sur le web mais cela se manifeste souvent par des messages très différents de celui qui m'a fait tiquer.

Il peut aussi être intéressant d'augmenter les valeurs des clefs suivantes : 
fs.inotify.max_queued_events = 16384 
fs.inotify.max_user_watches = 262144 
fs.inotify.max_user_instances = 2048