Слишком много процессов MySQL

12

Я пытаюсь помочь другу с его сервером после того, как он сказал мне, что его MySQL использует слишком много памяти ... Оказывается, он не только использует много памяти, но и слишком много запущенных процессов mysql!

Вот результат ps auxww|grep mysql: http://pastebin.com/kYrHLXVW

Таким образом, в основном есть 13 процессов MySQL, и есть только 1 клиент, связанный согласно mysqladmin ...

Через некоторое время каждый из этих процессов съедает до 50 МБ памяти, поэтому в конечном итоге он потребляет ОЧЕНЬ много памяти ...

Я использую шаблон конфигурации my-medium.cnf прямо из / usr / share / mysql ... Я перезапустил сервер mysql, но, как только он запускается, 13 процессов вернулись ... Я понятия не имею, что проблема может быть ... любые идеи / предложения будут по достоинству оценены!

user24994
источник

Ответы:

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

Они не используют 13 * 50Мб оперативной памяти - Они , вероятно , использовать что - то вроде 70Mb общего . Помните, что этот linux будет совместно использовать неизмененные страницы памяти между процессами, поэтому, если ваш сервер запущен заново, большая часть этой памяти будет распределена. Фактически, поскольку mysql является многопоточным, вероятно, будет выделено еще меньше памяти для каждого потока. Если вас беспокоит использование памяти каждым процессом mysql, посмотрите /etc/mysql/my.cnfи посмотрите на переменные в разделе mysqld:

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

Однако имейте в виду, что это очень мощные переменные для настройки, и вы можете легко убить свою производительность mysql, установив их слишком низко, или тратить память, которую можно было бы использовать в другом месте, установив их слишком высоко.

Один простой отправной точкой , чтобы выяснить , лучший способ , чтобы настроить ваш экземпляр MySQL должен запустить приложение для немного, а затем запустить скрипт mysqltune из здесь , который будет анализировать свои счетчики производительности, затем производят рекомендацию о том , что вы должны изменить в ваш сервер конфиг.

Джейсон
источник
1
Я не знал mysqltune, очень полезное спасибо. Кроме того, можно использовать htopдля окрашивания наших потоков и посмотреть фактическую память, используемую для процесса.
Mveroone
3

Linux показывает потоки как отдельные процессы. MySQL запускает один поток на соединение. Бег psс f. Например, ps auxfwбудет отображаться, как связаны темы.

Сколько существует соединений с MySQL? Запустите show full processlist;в клиенте MySQL. Судя по тому, что ты показываешь, я даже не уверен, что что-то не так.

сигнализатор
источник
Вот результат: pastebin.com/raw.php?i=XNCsG6KS Сервер был только что запущен Не уверен, что он помогает ... Под сценариями инициализации вы подразумеваете содержимое /etc/init.d/mysql?
user24994
Это выглядит совершенно нормально для меня.
Уорнер
По данным show full processlistесть 2 подключения к базе данных. Один из них выполняет localhost show full processlist, другой - я, через phpmyadmin. Больше не должно быть связи, так как сайт еще не
запущен
Количество подключений будет зависеть от того, как работает ваше приложение, и не обязательно напрямую связано с количеством пользователей. MySQL использует память в соответствии с настройкой cnf. Что заставляет вас думать, что он делает что-то не так?
Уорнер
Извините, я думаю, это не совсем понятно в моем вопросе, ха-ха, вполне возможно, что в этом нет ничего плохого! Я только что заметил, что mysql использует много памяти (около 13 * 50 МБ, поэтому 650 МБ ОЗУ), и пока нет трафика на сайт ... Просто я возился в phpmyadmin. Поэтому я думаю, что мой вопрос был больше "Есть ли что-то не так?" вместо "Что не так" :)
user24994
1

Возможно, вы захотите попробовать MySQLTuner, который я нашел очень полезным, он подскажет вам, какие переменные конфигурации вы должны попытаться настроить.

icc97
источник
Для новых читателей сценарий MySQLTuner размещен здесь: mysqltuner.pl
Джеспер Гранн Лаурсен