L'erreur 11 du système d'exploitation est "Ressource temporairement indisponible". La cause la plus courante de réception de cette erreur lors de la tentative de création d'un nouveau thread est que le noyau du processus a imposé une limite sur les descripteurs de fichiers ouverts. La deuxième cause la plus fréquente est d'avoir atteint la limite imposée par le noyau du processus sur le nombre de processus/threads.
Voici les facteurs impliqués :
- Les limites à l'échelle du système :sysctl -e fs.file-max &&sysctl -e kernel.threads-max
- Les limites par processus (dans un *nouveau* shell) :ulimit -n, grep nofile /etc/security/limits.conf et ulimit -u, grep nproc /etc/security/limits.conf.
- Le paramètre open_files_limit dans mysqld (mysql> affiche des variables globales comme "open_files_limit" ;).
- Les autres paramètres de mysqld qui peuvent affecter le nombre de FD ouverts et de threads que le processus peut utiliser (max_connections, thread_cache_size, table_open_cache, table_definition_cache, innodb_open_files, etc.)
En supposant que c'est en fait que nous avons atteint la limite de fichiers ouverts, qui est par défaut de 1024 sur la plupart des systèmes Linux, nous devrions être en mesure d'éviter le problème en prenant ces mesures :
1. Augmentez la limite de fichiers ouverts explicites dans mysqld en apportant cette modification au fichier my.cnf :
[mysqld] # Here X could be (max_connections+table_cache)*3 OR you could simply set it very high, for example 32000 open-files-limit = X
2. Redémarrez le service mysqld :
/etc/init.d/mysql restart
Limites NPROC
S'il apparaît plutôt que la limite nproc est la cause (CentOS 6 met une limite basse à ce sujet dans /etc/security/limits.conf), alors nous pouvons augmenter la limite nproc de différentes manières.
1. Modifier Limits.conf :
Nous pouvons définir les limites pour l'utilisateur mysql dans le fichier limits.conf, par exemple :
mysql soft nproc 10240 mysql hard nproc 40960
Notez que limits.conf ne s'applique qu'aux shells de connexion et n'affecte pas les processus démarrés par init ou systemd. Toute modification apportée à limits.conf ne s'appliquera qu'aux nouvelles connexions, vous devez vous déconnecter et vous reconnecter pour démarrer une nouvelle session.
2. Modifiez le script mysqld_safe :
Nous pouvons aussi simplement ajouter un appel ulimit en haut du script mysqld_safe, par exemple :
$ ulimit -u 40000
3. Utilisez un script wrapper :
Reportez-vous au post ci-dessous sur "Comment utiliser un script wrapper pour définir des attributs personnalisés par processus pour le serveur MySQL".
Comment utiliser un script wrapper pour définir des attributs personnalisés par processus pour le serveur MySQLNous devrons redémarrer mysqld pour que les modifications prennent effet.