2011-02-18 21 views
11

Buona giornata a tutti. Ho uno strano errore. Ho creato una chat che funziona in questo modo:php, mysql - Troppe connessioni all'errore del database

  • domande/risposte vengono inserite in un db
  • ogni 2 secondi una richiesta AJAX viene inviato ad uno script php che recuperare le nuove domande/risposte

ha funzionato bene fino ad oggi, quando ho ottenuto questo errore:

Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [1040] Too many connections' in /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Abstract.php:129 
Stack trace: #0 /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Abstract.php(129): PDO->__construct('mysql:host=loca...', '', '', Array) 
s#1 /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Mysql.php(96): Zend_Db_Adapter_Pdo_Abstract->_connect() 
s#2 /var/www/html/dbdev/include/Zend/Db/Adapter/Abstract.php(448): Zend_Db_Adapter_Pdo_Mysql->_connect() 
s#3 /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('select profile_...', Array) 
s#4 /var/www/html/dbdev/include/Zend/Db/Adapter/Abstract.php(782): Zend_Db_Adapter_Pdo_Abstract->query('select profile_...', Array) 
s#5 /var/www/html/dbdev/include/Profile.php(43): Zend_Db_Adapter_Abstract->fetchPairs('select profile_...') 
s#6 /var/www/html/dbdev/public_html/index.php(29): Profile->load() 
s#7 {main} Next exception 'Zend_Db_Adapter_Exception' with in /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Abstract.php on line 144 

il problema è che non siamo stati che molti ... (8) e non credo che il db non potrebbe sostenere più di 8 a 16 conn zioni contemporaneamente (su specifiche è scritto che la chat deve supportare 50-100 utenti quindi 8 è ... piccolo).

Quindi ... posso dirmi qual è il motivo per cui ciò è accaduto (ieri avevamo 15 anni e funzionato bene) e come risolverlo? Grazie per l'aiuto. Se hai bisogno di campioni di codice, basta chiedere.

+0

cosa è fuori mettere delle "variabili show come 'max_connections';" sul controllo di mysql client – Zimbabao

risposta

28

Ci sono un sacco di ragioni diverse per l'errore "troppe connessioni".

Partenza questa pagina FAQ sul MySQL.com: http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html

Controlla il tuo file my.cnf per "max_connections". Se nessuno esiste prova:

[mysqld] 
set-variable=max_connections=250 

Tuttavia, il valore predefinito è 151, quindi è necessario essere a posto.

Se ci si trova su un host condiviso, è possibile che altri utenti utilizzino troppe connessioni.

Altri problemi a cui prestare attenzione sono l'uso di connessioni persistenti e l'esaurimento dello spazio su disco.

1

Controllare se si apre una nuova connessione con ciascuna richiesta (mysql_connect (...)). Se lo fai, assicurati di chiudere la connessione in seguito (usando mysql_close ($ link)).

Inoltre, si dovrebbe prendere in considerazione la modifica di questo comportamento in quanto mantenere una connessione stabile per ciascun utente potrebbe essere un modo migliore per svolgere il proprio compito.

Se non avete già, dare un'occhiata a questa risorsa informazioni ovvio, ma comunque utile: http://php.net/manual/function.mysql-connect.php

11

L'errore SQLSTATE[HY000] [1040] Too many connections è un errore SQL, e ha a che fare con il server SQL. Potrebbero esserci altre applicazioni che si connettono al server. Il server ha un numero massimo di connessioni disponibili.

Se si dispone di phpmyadmin, è possibile utilizzare la scheda 'variabili' per verificare quale sia l'impostazione.

È possibile anche interrogare lo stato tabella in questo modo:

show status like '%onn%'; 

O qualche variazione su questo. controllare the manual per quello che le variabili ci sono

(essere consapevoli, 'collegamenti' non sono le connessioni correnti, verificare che puntano :))

+0

. guardo tra un minuto – zozo

+0

(ho aggiunto un altro modo per vedere questi vars btw) – Nanne

4

Se si stanno raggiungendo il limite delle connessioni mac andare a /etc/my.cnf e sotto la sezione [mysqld] aggiungere max_connections = 500

e riavviare MySQL.

1

Ciò può accadere a causa di troppe connessioni nello stesso momento o in molte chat contemporaneamente. Inoltre può accadere a causa di troppe sessioni.

Il modo migliore per risolvere questo problema è riavviare MySQL.

service mysqld restart 

o

service mysql restart 

o

/etc/init.d/mysqld restart 
Problemi correlati