Supponiamo che il tuo sistema sia attualmente basato su Unix (come indicato nella tua dichiarazione del problema). Se questo è corretto, ecco la serie di problemi che potresti riscontrare:
-
Hai esaurito la memoria disponibile per MySQL.
Questo è il problema più probabile che stai affrontando. Ogni connessione nel pool di connessioni di MySQL richiede memoria per funzionare e, se questa risorsa è esaurita, non è possibile effettuare ulteriori connessioni. Naturalmente, le impronte di memoria e le dimensioni massime dei pacchetti di varie operazioni possono essere ottimizzate in il tuo equivalente a
my.cnf
se scopri che questo è un problema.Ecco un thread aggiuntivo che può aiutarti , ma potresti anche prendere in considerazione l'utilizzo di strumenti di profilazione più semplici come
top
per ottenere una buona stima di quello che sta succedendo. -
Hai esaurito i descrittori di file disponibile per il tuo account utente MySQL.
Un altro problema comune:se stai cercando di soddisfare le richieste che richiedono file IO al di sopra del limite di 1.024 (per impostazione predefinita), ti imbatterai in casi in cui l'operazione semplicemente fallisce. Questo perché la maggior parte dei sistemi specifica un limite soft e hard al numero di descrittori di file aperti che ogni utente può avere a disposizione contemporaneamente e superare questa soglia può causare problemi.
Questo di solito avrà una serie di segni palesemente ovvi espressi nei file di registro. Controlla
/var/log/messages
e le tue directory comparabili (ad esempio,/var/log/mysql
per vedere se riesci a trovare qualcosa di interessante. -
Ti sei imbattuto in un livelock o deadlock scenario in cui il tuo thread è insoddisfacente.
Corollario dell'esaurimento della memoria e del descrittore di file, i thread possono scadere se hai superato il carico di calcolo che il tuo sistema è in grado di gestire. Non genererà questo messaggio di errore, ma è qualcosa a cui prestare attenzione in futuro.
-
Il tuo sistema sta esaurendo i PID disponibili per
fork
.Un altro scenario comune:
fork
ha solo così tanti PID disponibili per il suo utilizzo in un dato momento. Se il tuo sistema è semplicemente overfork , cesserà di essere in grado di soddisfare le richieste.Il controllo più semplice per questo è vedere se altri servizi possono connettersi alla macchina. Ad esempio, provare a entrare nella casella SSH e scoprire che non puoi è un grosso indizio.
-
Un proxy upstream o un gestore connessione ha esaurito le risorse e ha cessato le richieste di manutenzione.
Se hai un livello di servizio tra il tuo client e MySQL, è necessario ispezionarlo per vedere se si è bloccato, si è bloccato o è diventato in altro modo instabile. Si applica il consiglio di cui sopra.
-
Il tuo port mapper si è esaurito dopo 65.536 connessioni .
Improbabile, ma ancora una volta, un possibile caso di esaurimento. Controllare la connessione del servizio banale come sopra è, ehm, anche il miglior porto di scalo qui.
In breve:questo è uno scenario di esaurimento delle risorse, incluso il fatto che il server sia semplicemente "inattivo". Dovrai profilare ulteriormente il tuo sistema per vedere cosa stai bloccando. Tutto ciò che il messaggio di errore ci dà in questo caso è il fatto che la risorsa non è disponibile per il client -- avremmo bisogno di vedere più informazioni sul server per determinare un rimedio più adeguato.