Troppi processi MySQL


12

Sto cercando di aiutare un amico con il suo server dopo che mi ha detto che MySQL stava usando troppa memoria ... Si scopre che non sta usando solo molta memoria, ma ci sono troppi processi mysql in esecuzione!

Ecco il risultato di ps auxww|grep mysql: http://pastebin.com/kYrHLXVW

Quindi sostanzialmente ci sono 13 processi MySQL e c'è solo 1 client collegato secondo mysqladmin ...

Dopo un po ', ognuno di questi processi consuma fino a 50 MB di memoria, quindi finisce per consumare MOLTA memoria ...

Sto usando il modello di configurazione my-medium.cnf direttamente da / usr / share / mysql ... Ho riavviato il server mysql ma, non appena si avvia, i 13 processi sono tornati ... Non ho idea di quale sia il il problema potrebbe essere ... qualsiasi idea / suggerimento sarebbe davvero apprezzata!

Risposte:


16
mysql     9804  0.0  0.6 58556 22960 pts/0   S    12:43   0:00  \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
mysql     9807  0.0  0.6 58556 22960 pts/0   S    12:43   0:00      \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
mysql     9808  0.0  0.6 58556 22960 pts/0   S    12:43   0:00          \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
mysql     9809  0.0  0.6 58556 22960 pts/0   S    12:43   0:00          \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
mysql     9810  0.0  0.6 58556 22960 pts/0   S    12:43   0:00          \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock
[ ... repeated output truncated ... ]

Non stanno usando 13 * 50mb di ram - Probabilmente stanno usando qualcosa come 70mb in totale . Ricorda che Linux condividerà pagine di memoria non modificate tra i processi, quindi se il tuo server viene avviato di recente la maggior parte di quella memoria verrebbe condivisa. In effetti, dal momento che mysql è thread, probabilmente verrà allocata anche meno memoria per thread. Se sei preoccupato per l'utilizzo della memoria di ogni processo mysql, guarda /etc/mysql/my.cnfe guarda le variabili nella sezione mysqld:

  • key_buffers
  • thread_stack
  • thread_cache_size
  • max_connections
  • query_cache_limit
  • query_cache_size

Tuttavia, tieni presente che quelle sono variabili molto potenti da sintonizzare e puoi facilmente uccidere le tue prestazioni mysql impostandole troppo basse o sprecare memoria che potrebbe essere utilizzata altrove impostandole troppo alte.

Un semplice punto di partenza per capire il modo migliore per ottimizzare la tua istanza mysql è eseguire la tua app per un po ', quindi eseguire lo script mysqltune da qui , che analizzerà i contatori delle prestazioni, quindi produrre una raccomandazione su cosa dovresti cambiare la tua configurazione del server.


1
Non lo sapevo mysqltune, grazie molto utile. Inoltre, si può usare htopper colorare i nostri fili e vedere la memoria effettiva utilizzata per processo.
mveroone,

3

Linux mostra i thread come processi separati. MySQL avvia un thread per connessione. In esecuzione pscon f. Ad esempio, ps auxfwvisualizzerà come i thread sono correlati.

Quante connessioni ci sono su MySQL? Esegui show full processlist;nel client MySQL. Da quello che stai mostrando, non sono nemmeno sicuro che ci sia qualcosa di sbagliato.


Ecco il risultato: pastebin.com/raw.php?i=XNCsG6KS Il server è stato appena avviato Non sei sicuro che possa essere d'aiuto ... Con script init intendi il contenuto di /etc/init.d/mysql?
user24994

Mi sembra perfettamente normale.
Warner,

Secondo show full processlistci sono 2 connessioni al database. Uno di questi è localhost in esecuzione show full processlist, l'altro sono anche io, tramite phpmyadmin. Non ci dovrebbero essere più connessioni in quanto il sito non è ancora
attivo

La quantità di connessioni dipenderà dalle prestazioni dell'applicazione e non sarà necessariamente direttamente correlata alla quantità di utenti. MySQL utilizza la memoria basata sull'impostazione cnf. Cosa ti fa pensare che stia facendo qualcosa di sbagliato?
Warner,

Scusa, immagino non sia stato molto chiaro nella mia domanda ahah, è del tutto possibile che non ci sia niente di male! Ho appena notato che mysql stava usando molta memoria (circa 13 * 50mb, quindi 650mb di RAM) e non c'è ancora traffico al sito ... Solo io che faccio casino in phpmyadmin. Quindi suppongo che la mia domanda fosse più "C'è qualcosa che non va?" anziché "Cosa c'è che non va" :)
user24994

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.