Estoy experimentando algunos problemas con mi servidor LAMP. Recientemente todo se volvió muy lento, aunque el número de visitantes en mis sitios web no cambió demasiado. Cuando ejecuto el top
comando, dice que el proceso MySQL ha tomado más del 150-200% de la CPU. ¿Cómo es eso posible, siempre pensé que 100% es un máximo?
Estoy ejecutando Ubuntu 9.04 server edition con 1,5 GB de RAM.
my.cnf
ajustes:
key_buffer = 64M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
myisam-recover = BACKUP
max_connections = 200
table_cache = 512
table_definition_cache = 512
thread_concurrency = 2
read_buffer_size = 1M
sort_buffer_size = 4M
join_buffer_size = 1M
query_cache_limit = 1M # the maximum size of individual query results
query_cache_size = 128M
Aquí está la salida de MySQLTuner :
El top
comando:
¿Cúal podría ser la causa de este problema? ¿Puedo hacer cambios en mi my.cnf
para evitar que el servidor se cuelgue?
mysql
performance
cpu-usage
Temnovit
fuente
fuente
Tiene un procesador que tiene más de un núcleo, o tiene múltiples procesadores. Si tiene dos núcleos y un proceso está utilizando el 100% de ambos núcleos, se mostrará como 200% en la parte superior.
Del mismo modo, es probable que esto funcione según lo previsto: su configuración no tiene nada de malo. Si experimenta bloqueos frecuentes, por lo que publicó, es posible que desee agregar índices adecuados a sus tablas (u optimizar sus consultas).
fuente
Ejecute
top -H
para ver todos los subprocesos en ejecución y no solo el proceso general. Además, si presiona la1
tecla mientras está en la parte superior, le mostrará el uso de la CPU para las CPU / núcleos individuales.fuente
Mysql tiene múltiples procesos (hilos) que funcionan de forma independiente, uno, por ejemplo, es responsable de escribir los datos de la memoria en el disco. Con múltiples núcleos en la CPU (y / o múltiples CPU), más de un hilo está funcionando y, por lo tanto, puede ejecutar más del 100% de un solo núcleo; en un nivel simplista, tal vez el 75% de cada uno de los dos núcleos se está ejecutando , dando el 150%.
fuente
He notado un problema, no relacionado con la CPU. Si usa Apache y MySQL en el mismo servidor, puede alcanzar malas condiciones ( RAM ) cuando aumenta su actividad de Apache.
MySQLTunner le dice que usando las 200 conexiones disponibles (su configuración de conexión máxima) llenará la RAM. Digamos que tiene un proceso de apache limitado a 150, ciertamente no tendrá suficiente RAM cuando MySQL y apache intenten usar 150 conexiones (ya que Apache también es un buen devorador de RAM).
Entonces, esto se trata de RAM y quizás aún no haya sido alcanzado :-) Los comandos superiores muestran solo 15 procesos de apache (pero tiene un promedio de carga del 3/6/16, lo que significa que la tormenta fue hace 15 minutos y ahora está en dejando).
Sobre el problema de la CPU, para complementar la buena respuesta de shakalandy , esto puede deberse a una sola consulta. Puede estar en una mesa enorme, o haciendo muchas tareas de reindexación, o usando muchos archivos temporales, faltando un índice (¿eliminado?), Etc. La única forma de detectarlo es activando el registro de consulta lento (tal vez con un alto umbral, como 8s). Luego use la herramienta mysqlsla para analizar este registro lento de consultas y ejecute algunas explicaciones sobre las consultas identificadas.
fuente