Я пытаюсь помочь другу с его сервером после того, как он сказал мне, что его MySQL использует слишком много памяти ... Оказывается, он не только использует много памяти, но и работает слишком много процессов mysql!
Вот результат ps auxww|grep mysql
: http://pastebin.com/kYrHLXVW
Таким образом, в основном существует 13 процессов MySQL, и только 1 клиент подключен согласно mysqladmin ...
Через некоторое время каждый из этих процессов съедает до 50 МБ памяти, поэтому в конечном итоге он потребляет МНОГО памяти ...
Я использую шаблон конфигурации my-medium.cnf прямо из / usr / share / mysql ... Я перезапустил сервер mysql, но как только он запустился, 13 процессов вернулись ... Я понятия не имею, что это за проблема может быть ... любые идеи / предложения были бы очень признательны!
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 МБ оперативной памяти - они, вероятно, используют что-то вроде 70 МБ общее количество. Помните, что 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 из Вот, который проанализирует ваши счетчики производительности, а затем даст рекомендации о том, что вам следует изменить в конфигурации вашего сервера.
Linux показывает потоки как отдельные процессы. MySQL запускает один поток на каждое соединение. Бег ps
с участием f
. Например, ps auxfw
покажет, как связаны потоки.
Сколько подключений к MySQL? Бегать show full processlist;
в клиенте MySQL. Судя по тому, что вы показываете, я даже не уверен, что что-то не так.
Вы можете попробовать MySQLTuner который я нашел очень полезным, он предложит вам, какие из переменных конфигурации вы должны попробовать настроить.