Занадто багато процесів MySQL


12

Я намагаюся допомогти другові зі своїм сервером після того, як він сказав мені, що його MySQL використовує занадто багато пам’яті… Виявляється, це не тільки використовує багато пам’яті, але існує занадто багато запущених mysql-процесів!

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

Отже, в основному існує 13 MySQL-процесів, і є лише один клієнт, підключений відповідно до mysqladmin ...

Через деякий час кожен з цих процесів з’їдає до 50 Мб пам’яті, так що в кінцевому рахунку витрачається багато пам'яті ...

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

Відповіді:


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 Сервер щойно запущений Не впевнений, чи це допомагає ... Під скриптами init ви маєте на увазі вміст /etc/init.d/mysql?
user24994

Це для мене виглядає абсолютно нормально.
Warner

Відповідно до show full processlistбази даних є 2 підключення. Один з них виконує локальний хост show full processlist, інший - також я, через phpmyadmin. Більше не повинно бути жодного зв’язку, оскільки веб-сайт ще не працює ...
user24994

Кількість підключень залежатиме від того, наскільки працює ваша програма, а не обов'язково безпосередньо пов'язана з кількістю користувачів. MySQL використовує пам'ять на основі налаштування cnf. Що змушує вас думати, що робить щось не так?
Warner

Вибачте, я думаю, це було не зовсім зрозуміло в моєму питанні ха-ха, цілком можливо, що нічого поганого не відбувається! Я щойно помітив, що mysql використовує багато пам’яті (приблизно 13 * 50 Мб, так що 650 Мб оперативної пам’яті) і немає ще трафіку на сайт… Просто мені занепокоєний phpmyadmin. Тож я здогадуюсь, моє запитання було більше "Чи щось не так?" замість "Що не так" :)
user24994

1

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


Для нових читачів сценарій MySQLTuner розміщений тут: mysqltuner.pl
Jesper Grann Laursen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.