GNU/Linux >> Linux Esercitazione >  >> Linux

Errore del server MySQL – "Impossibile creare un nuovo thread (errno 11)"

L'errore 11 del sistema operativo è "Risorsa temporaneamente non disponibile". La causa più comune per la ricezione di questo errore quando si tenta di creare un nuovo thread è il fatto che il kernel del processo ha imposto un limite ai descrittori di file aperti. La seconda causa più comune è il raggiungimento del limite imposto dal kernel del processo sul numero di processi/thread.

Ecco i fattori coinvolti:

  1. I limiti a livello di sistema:sysctl -e fs.file-max &&sysctl -e kernel.threads-max
  2. I limiti per processo (in una *nuova* shell):ulimit -n, grep nofile /etc/security/limits.conf e ulimit -u, grep nproc /etc/security/limits.conf.
  3. L'impostazione open_files_limit in mysqld (mysql> mostra variabili globali come "open_files_limit";).
  4. Le altre impostazioni all'interno di mysqld che possono influenzare il numero di FD aperti e thread che il processo può utilizzare (max_connections, thread_cache_size, table_open_cache, table_definition_cache, innodb_open_files, ecc.)

Supponendo che sia stato effettivamente raggiunto il limite di file aperti, che per impostazione predefinita è 1024 sulla maggior parte dei sistemi Linux, dovremmo essere in grado di evitare il problema seguendo questi passaggi:

1. Aumentare il limite di file aperti espliciti in mysqld apportando questa modifica al file 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. Riavvia il servizio MySQL:

/etc/init.d/mysql restart

Limiti NPROC

Se invece sembra che la causa sia il limite nproc (CentOS 6 pone un limite basso in /etc/security/limits.conf), allora possiamo aumentare il limite nproc in diversi modi.

1. Modifica limit.conf:

Possiamo impostare i limiti per l'utente mysql nel file limit.conf, ad esempio:

mysql soft nproc 10240
mysql hard nproc 40960

Si noti che limit.conf si applica solo alle shell di accesso e non influisce sui processi avviati da init o systemd. Qualsiasi modifica a limit.conf si applicherà solo ai nuovi accessi, devi disconnetterti e accedere per iniziare una nuova sessione.

2. Modifica lo script mysqld_safe:

Possiamo anche semplicemente aggiungere una chiamata ulimit nella parte superiore dello script mysqld_safe, ad esempio:

$ ulimit -u 40000

3. Usa uno script wrapper:

Fare riferimento al post di seguito su "Come utilizzare uno script wrapper per impostare attributi per processo personalizzati per server MySQL".

Come utilizzare uno script wrapper per impostare attributi per processo personalizzati per MySQL Server

Dovremo riavviare mysqld affinché le modifiche abbiano effetto.


Linux
  1. Crea un server DNS

  2. Crea un nuovo utente e concedi i permessi in MySQL

  3. Come posso creare a livello di codice un nuovo cron job?

  4. Impossibile connettersi all'errore 111 del server MySQL

  5. errno è thread-safe?

Come creare un nuovo utente amministratore di WordPress tramite MySQL

Come creare un nuovo utente MySQL tramite phpMyAdmin

Come creare un nuovo database e utente MySQL?

Come posso creare un nuovo database MySQL in cPanel?

Come creare un nuovo server cloud Atlantic.Net

Crea un server cloud