Demasiados procesos MySQL

12

Estoy tratando de ayudar a un amigo con su servidor después de que me dijo que su MySQL estaba usando demasiada memoria ... Resulta que no solo está usando mucha memoria, ¡sino que hay demasiados procesos mysql ejecutándose!

Aquí está el resultado de ps auxww|grep mysql: http://pastebin.com/kYrHLXVW

Básicamente, hay 13 procesos MySQL, y solo hay 1 cliente conectado de acuerdo con mysqladmin ...

Después de un tiempo, cada uno de estos procesos consume hasta 50 MB de memoria, por lo que termina consumiendo MUCHA memoria ...

Estoy usando la plantilla de configuración my-medium.cnf directamente desde / usr / share / mysql ... Reinicié el servidor mysql pero, tan pronto como se inicia, los 13 procesos están de vuelta ... No tengo idea de qué El problema podría ser ... cualquier idea / sugerencia sería muy apreciada.

user24994
fuente

Respuestas:

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 ... ]

No están usando 13 * 50mb de ram - Probablemente estén usando algo como 70mb en total . Recuerde que Linux compartirá páginas de memoria no modificadas entre procesos, por lo que si su servidor se inicia recientemente, la mayor parte de esa memoria se compartiría. De hecho, dado que mysql está enhebrado, probablemente solo habrá menos memoria asignada por hilo. Si le preocupa el uso de memoria de cada proceso mysql, mire /etc/mysql/my.cnfy mire las variables en la sección mysqld:

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

Sin embargo, tenga en cuenta que esas son variables muy poderosas para ajustar, y puede matar fácilmente su rendimiento de mysql configurándolas demasiado bajas, o desperdiciar memoria que podría usarse en otros lugares configurándolas demasiado altas.

Un punto de partida fácil para descubrir la mejor manera de ajustar su instancia de mysql es ejecutar su aplicación por un momento, luego ejecutar el script mysqltune desde aquí , que analizará sus contadores de rendimiento, luego producirá una recomendación sobre lo que debe cambiar en la configuración de su servidor

Jason
fuente
1
No lo sabía mysqltune, muy útil gracias. Además, uno puede usar htoppara colorear nuestros hilos y ver la memoria real utilizada por proceso.
mveroone
3

Linux muestra hilos como procesos separados. MySQL inicia un hilo por conexión. Corriendo pscon f. Por ejemplo, ps auxfwmostrará cómo se relacionan los hilos.

¿Cuántas conexiones hay con MySQL? Ejecutar show full processlist;en el cliente MySQL. Por lo que estás mostrando, ni siquiera estoy seguro de que haya algo mal.

Warner
fuente
Aquí está el resultado: pastebin.com/raw.php?i=XNCsG6KS El servidor se acaba de iniciar No estoy seguro de si ayuda ... ¿Por scripts de inicio te refieres al contenido de /etc/init.d/mysql?
user24994
Eso me parece perfectamente normal.
Warner
Según show full processlisthay 2 conexiones a la base de datos. Uno de ellos es localhost ejecutándose show full processlist, el otro también soy yo, a través de phpmyadmin. No debería haber ninguna conexión más que el sitio no es todavía vivo ...
user24994
La cantidad de conexiones dependerá del rendimiento de su aplicación y no necesariamente estará directamente relacionada con la cantidad de usuarios. MySQL utiliza memoria basada en la configuración de cnf. ¿Qué te hace pensar que está haciendo algo mal?
Warner
Lo siento, supongo que no estaba muy claro en mi pregunta jaja, ¡es totalmente posible que no haya nada malo! Me acabo de dar cuenta de que mysql estaba usando mucha memoria (aproximadamente 13 * 50mb, por lo que 650mb de ram) y todavía no hay tráfico al sitio ... Solo yo jugando en phpmyadmin. Así que supongo que mi pregunta era más "¿Hay algo mal?" en lugar de "Qué pasa" :)
user24994
1

Es posible que desee probar MySQLTuner, que me pareció muy útil, ya que le sugerirá cuál de las variables de configuración debe intentar ajustar.

icc97
fuente
Para los nuevos lectores, el script MySQLTuner se coloca aquí: mysqltuner.pl
Jesper Grann Laursen