У меня много проблем с mysql, который ест слишком много барана на маленькой машине, и мне нужна помощь, чтобы выяснить, почему он так много ест.
У меня есть небольшая виртуальная машина с 256 МБ ОЗУ, на которой запущен Debian Wheezy. На этом сервере у меня установлены apache2 и mysql. Я мало что делаю на этом сервере, только несколько мало используемых веб-сайтов и почтовый сервер.
Почему-то несколько раз в день мой сервер mysql дает сбой. Когда я проверяю свой системный журнал, я обнаруживаю следующую ошибку:
ядро: [3323593.630722] Недостаточно памяти в UB: OOM убил процесс 9471 (mysqld) score 0 vm: 327824kB, rss: 37080kB, swap: 0kB
Итак, насколько я могу судить, mysql начинает съедать слишком много памяти и убивается системой. Я регистрирую медленные запросы и слежу за своим журналом mysql.err, но я не вижу ничего ценного в тех, которые показывали бы мне, почему mysql начинает съедать так много памяти.
В моем файле my.cnf установлены следующие параметры:
key_buffer = 8M
max_allowed_packet = 16M
thread_stack = 128K
thread_cache_size = 8
query_cache_limit = 512K
query_cache_size = 8M
Другое дело, что когда я проверяю объем используемой памяти при запуске mysql и даже в течение дня, пока он работает, у меня обычно остается около 128 МБ свободного места. Я не понимаю, как mysql когда-нибудь съест такое количество.
Что я могу сделать, чтобы отследить эту проблему?
256 МБ для Apache и MySQL - это крайне мало. Я всегда рекомендую как минимум 512 МБ для этой комбинации (и это минимум). Однако то, что вы говорите, не обязательно является причиной проблемы MySQL, это просто убийца OOM, убивающий MySQL, потому что у виртуальной машины закончилась память. Кроме того, MySQL имеет множество значений по умолчанию, поэтому, даже если вы не установили их в my.cnf, innodb_buffer_pool_size потребует 8 МБ и так далее.