Mysqld sempre rodando a 90% cpu

1

Recentemente, mudei minha loja magento de um ambiente de host compartilhado para um VPS privado. O VPS está executando o CentOS, mysql, nginx e php-fpm.

Meu VPS tem 4 GB de RAM e 4 núcleos de CPU. No momento, meu site é bem pequeno, mas espero que o número de visitantes aumente.

De qualquer forma, aqui está o meu problema. O Mysqld está sempre rodando a 90% da CPU. Mesmo quando não há processos ativos, na inicialização, sempre. Nem menos nem mais. Eu procurei por esse problema, mas não encontrei nada que pudesse ser usado para resolvê-lo.

Se alguém olhar gentilmente através do arquivo my.cnf, seria muito bom ver se os problemas são causados por configuração defeituosa, eu sou muito novo neste trabalho administrativo do servidor.

[mysql]

# CLIENT #
port                           = 3306
socket                         = /var/lib/mysql/mysql.sock

[mysqld]
query_cache_limit=4M
query_cache_size=16M
query_cache_type=1
sort_buffer_size=1M
read_buffer_size=2M
read_rnd_buffer_size=1536K
join_buffer_size=2M
bulk_insert_buffer_size = 8M
max_allowed_packet = 64M
thread_stack = 192K


# GENERAL #
user                           = mysql
default_storage_engine         = InnoDB
socket                         = /var/lib/mysql/mysql.sock
pid_file                       = /var/run/mysqld/mysqld.pid
symbolic-links=0
skip-networking
skip-slave-start
log_warnings=0


# SAFETY #
skip_name_resolve
innodb                         = FORCE
innodb_strict_mode             = 0

# DATA STORAGE #
datadir                        = /var/lib/mysql
tmpdir                         = /tmp

# BINARY LOGGING #
#log_bin                        = /var/lib/mysql/mysql-bin
#expire_logs_days               = 6
#sync_binlog                    = 1

max_connections=20
max_user_connections=10

wait_timeout=400

key_buffer_size=32M # 256M for 4GB, 512M for 8GB
key_buffer=32M

table_open_cache=1024
table_definition_cache=1024

max_heap_table_size=32M
tmp_table_size=32M




innodb_additional_mem_pool_size=8M
innodb_buffer_pool_size=64M 
innodb_flush_log_at_trx_commit=2
innodb_support_xa = 0
innodb_flush_method=O_DIRECT
innodb_log_file_size=32M
innodb_log_files_in_group=2
innodb_use_sys_malloc=0
innodb_thread_concurrency=10




# Advanced
low_priority_updates=1
concurrent_insert=2
thread_cache_size=32 

Muito apreciada! Muito obrigado!

Mostra apenas o seguinte:

202 | root | localhost | NULL | Query   |    0 | NULL  | show processlist

O vmstat mostra o seguinte:

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 3215392      0 172600    0    0    28    10    0   16 69  7  2  0 23

Mysql Show processlist;

+----+------+-----------+------+---------+------+-------+------------------+
| Id | User | Host      | db   | Command | Time | State | Info             |
+----+------+-----------+------+---------+------+-------+------------------+
| 11 | root | localhost | NULL | Query   |    0 | NULL  | show processlist |
+----+------+-----------+------+---------+------+-------+------------------+
1 row in set (0.00 sec)
    
por Stgrmrk 25.09.2012 / 20:46

2 respostas

2

Inserir linhas para o arquivo slow_query no arquivo my.cnf e revisar o slow-query.log

log-slow-queries = /var/log/slow-query.log

reinicie o serviço mysqld e execute

tail -f /var/log/slow-query.log

    
por 25.09.2012 / 22:10
1

Nada problemático com a sua configuração my.cnf.

  1. Verifique se seu banco de dados & tabelas usam innodb não myISAM. Se você tem myisam - então você pode experimentar o bloqueio de tabela que aumentará o uso da CPU, pois mais consultas serão colocadas na fila até que o bloqueio seja liberado

  2. De acordo com a sua configuração você tem um site muito pequeno (20 conexões paralelas - Max), então o tráfego não é um problema.

  3. Se você executar um site personalizado - provavelmente o problema poderia estar em consultas ineficientes, será necessário configurar o log de consultas sloq e monitorar o tempo de execução para consultas lentas por trás de 2 segundos. Se você tiver consultas que são executadas por mais de 15 segundos, você tem problemas com índices.

Você precisará verificar quantos registros você tem em suas tabelas e então aplicar índices ou desnormalizar seu banco de dados

  1. Outro problema é que você pode ter um VPS em um ambiente virtualizado "superlotado". Isso significa que você pode ter um IO muito ineficaz ou lutar pela memória / CPU de outras VMs. Executar

    vmstat 1

e observe colunas

  • ID da CPU * (tempo ocioso), quanto mais tempo melhor
  • troca & io

nos forneça os seguintes comandos

  1. vmstat
  2. iotop
  3. faça o login no mysql como root > mostre a lista de processos
por 25.09.2012 / 22:25

Tags