Estou com alguns problemas com meu servidor LAMP. Recentemente, tudo ficou muito lento, embora a contagem de visitantes nos meus sites não tenha mudado muito. Quando executo o top
comando, ele diz que o processo MySQL ocupou mais de 150 a 200% da CPU. Como isso é possível, eu sempre pensei que 100% é o máximo?
Estou executando o Ubuntu 9.04 Server Edition com 1,5 GB de RAM.
my.cnf
configurações:
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
Aqui está a saída do MySQLTuner :
O top
comando:
Qual poderia ser a causa deste problema? Posso fazer alterações no meu my.cnf
para impedir a suspensão do servidor?
mysql
performance
cpu-usage
Temnovit
fonte
fonte
Você possui um processador que possui mais de um núcleo ou vários processadores. Se você tiver dois núcleos e um processo estiver usando 100% dos dois núcleos, será exibido como 200% no topo.
Da mesma forma, isso provavelmente está funcionando como planejado - nada está errado com sua configuração. Se você estiver enfrentando travamentos frequentes, do que publicou, convém adicionar índices adequados às suas tabelas (ou otimizar suas consultas).
fonte
Execute
top -H
para ver todos os threads em execução e não apenas o processo geral. Além disso, se você pressionar a1
tecla enquanto estiver no topo, ela mostrará o uso da CPU para as CPUs / núcleos individuais.fonte
O Mysql possui vários processos (threads) trabalhando de forma independente; um, por exemplo, é responsável por gravar dados da memória no disco. Com vários núcleos na CPU (e / ou várias CPUs), mais de um thread está funcionando e, portanto, ele pode executar mais de 100% de um único núcleo - em um nível simplista, talvez 75% de cada um dos dois núcleos esteja em execução. , dando 150%.
fonte
Percebi um problema, não relacionado à CPU. Se você estiver usando apache e MySQL no mesmo servidor, poderá alcançar más condições ( RAM ) quando a atividade do apache aumentar.
O MySQLTunner informa que, usando as 200 conexões disponíveis (sua configuração de conexão máxima), você preencherá a RAM. Digamos que você tenha o apache limitado a 150 processos, você certamente não terá RAM suficiente quando o MySQL e o apache tentarem usar 150 conexões (já que o Apache também é um bom consumidor de RAM).
Portanto, trata-se de RAM e talvez você ainda não tenha sido atingido :-) Os comandos superiores mostram apenas 15 processos apache (mas você está em uma média de carga de 3/6/16, o que significa que a tempestade ocorreu há 15 minutos e agora está em saindo).
Sobre o problema da CPU, para complementar a boa resposta de shakalandy , isso pode ocorrer por causa de uma única consulta. Ele pode estar em uma mesa enorme ou executar várias tarefas de reindexação ou usar muitos arquivos temporários, um índice ausente (removido?) Etc. A única maneira de detectá-lo é ativar o log lento de consultas (talvez com um thresold alto, como 8s). Em seguida, use a ferramenta mysqlsla para analisar esse log de consultas lento e execute algumas explicações nas consultas identificadas.
fonte