Muitos processos MySQL

12

Estou tentando ajudar um amigo com o servidor dele depois que ele me disse que o MySQL estava usando muita memória ... Acontece que não está apenas usando muita memória, mas há muitos processos mysql em execução!

Aqui está o resultado de ps auxww|grep mysql: http://pastebin.com/kYrHLXVW

Então, basicamente, existem 13 processos MySQL, e há apenas 1 cliente conectado de acordo com o mysqladmin ...

Depois de um tempo, cada um desses processos consome até 50 MB de memória e acaba consumindo MUITA memória ...

Estou usando o modelo de configuração my-medium.cnf direto de / usr / share / mysql ... Reiniciei o servidor mysql, mas, assim que ele inicia, os 13 processos estão de volta ... Não tenho idéia do que problema poderia ser ... quaisquer idéias / sugestões seriam realmente apreciadas!

user24994
fonte

Respostas:

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

Eles não estão usando 13 * 50mb de ram - Eles provavelmente estão usando algo como 70mb total . Lembre-se de que o linux compartilhará páginas de memória não modificada entre processos, portanto, se o servidor for iniciado recentemente, a maior parte dessa memória será compartilhada. De fato, como o mysql é encadeado, provavelmente haverá apenas menos memória alocada por encadeamento. Se você está preocupado com o uso da memória de cada processo mysql, veja /etc/mysql/my.cnfe veja as variáveis ​​na seção mysqld:

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

Entretanto, esteja avisado de que essas são variáveis ​​muito poderosas para ajustar, e você pode facilmente matar o desempenho do mysql, definindo-as como muito baixas, ou desperdiçar memória que pode ser usada em outro lugar, definindo-as como muito altas.

Um ponto de partida fácil para descobrir a melhor maneira de ajustar sua instância do mysql é executar um pouco o aplicativo, depois execute o script mysqltune a partir daqui , que analisará seus contadores de desempenho e produzirá uma recomendação sobre o que você deve alterar. sua configuração do servidor.

Jason
fonte
1
Eu não sabia mysqltune, muito obrigado obrigado. Além disso, pode-se usar htoppara colorir nossos threads e ver a memória real usada por processo.
Mveroone 9/09/13
3

Linux mostra threads como processos separados. O MySQL inicia um thread por conexão. Correndo pscom f. Por exemplo, ps auxfwexibirá como os threads estão relacionados.

Quantas conexões existem no MySQL? Execute show full processlist;no cliente MySQL. Pelo que você está mostrando, nem tenho certeza de que haja algo errado.

Warner
fonte
Aqui está o resultado: pastebin.com/raw.php?i=XNCsG6KS O servidor acabou de ser iniciado Não tenho certeza se ajuda ... Por scripts init, você quer dizer o conteúdo de /etc/init.d/mysql?
user24994
Isso parece perfeitamente normal para mim.
Warner
De acordo com show full processlistexistem 2 conexões com o banco de dados. Um deles sendo localhost executando show full processlist, o outro também sou eu, via phpmyadmin. Não deve haver mais nenhuma ligação como o local ainda não está vivo ...
user24994
A quantidade de conexões dependerá do desempenho do seu aplicativo e não necessariamente diretamente relacionada à quantidade de usuários. O MySQL utiliza memória com base na configuração cnf. O que faz você pensar que está fazendo algo errado?
Warner
Desculpe, acho que não ficou muito claro na minha pergunta haha, é totalmente possível que não haja nada errado! Acabei de notar que o mysql estava usando muita memória (aproximadamente 13 * 50mb, portanto 650mb de ram) e ainda não há tráfego para o site ... Apenas eu brincando no phpmyadmin. Então, acho que minha pergunta era mais "Há algo errado?" em vez de "O que está errado" :)
user24994
1

Você pode tentar o MySQLTuner, que eu achei muito útil; ele sugere quais das variáveis ​​de configuração você deve tentar ajustar.

icc97
fonte
Para novos leitores, o script MySQLTuner é colocado aqui: mysqltuner.pl
Jesper Grann Laursen