В основном это касается Virtual Dedicated Server (VDS/VPS), т.к. дефолтная установка MySQL на CeontOS/Fedora/RHEL с дефолтным my.cnf делает malloc на сотню с лишним мегабайт.
Конечно на потребляемую память MySQL влияют такие параметры как key_buffer, query_cache_size и т.п. Но они по дефолту идут минимальные, а кеш запросов вообще по моему отключен по дефолту.
Так вот все очень просто. Добавляем в my.cnf:
skip-innodb
skip-bdb
Это выключит хандлеры InnoDB и BerkeleyDB и всю потребляемую ими память. Ну конечно делать это нужно если вы не используете вышеприведенные типы таблиц.
Далее рестартуем мускуль и видим в топе что он занимает десяток-другой мегабайт.
PS: в большинстве случаев не помешает опция и skip-networking. А вот thread_cache_size я советую поставить в значение 5-15 (в зависимости от нагрузки)
Посты
дружище спасибо за статью! у меня mysqld жрал 27% процессора теперь только 1,5%!
случаем не подскажешь насчет свопа на VDS, у меня он нулевой, может имеет смысл увеличить его?
вот мой топ)
top – 10:29:14 up 4 min, 1 user, load average: 0.37, 0.50, 0.23
Tasks: 82 total, 1 running, 80 sleeping, 0 stopped, 1 zombie
Cpu(s): 0.5% us, 0.5% sy, 0.0% ni, 93.2% id, 5.8% wa, 0.0% hi, 0.0% si
Mem: 512000k total, 226920k used, 285080k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 0k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
16306 mysql 15 0 25260 6424 2964 S 0.7 1.3 0:11.76 mysqld
Насколько мне известно, своп в виртуальной машине можно только увеличить на хост-машинах с ПО аппаратной виртуализации или паравиртуализации, т.е. VmWare,Xen.
На Virtuozzo/OpenVZ такого сделать нельзя. Если у вас хост-машина работает на Xen/VmWare, вам своп безусловно не помешает.
работает на OpenVZ.
с свопом ясно.
а вот уменьшение стека помогает? уменьшил с 8 мб до 1 мб
( ulimit -s 1024 )
а еще вопрос, что можно сделать при нехватке памяти? чтоб VDS не вис намертво, а прибивал жрущие процессы. Еще бы отловить как нибудь процесс который забивает память..
Из идей только прога на дельфях которая будет висеть в трее и каждую минуту чекать домены, и если что дергать ремоут ребут.
хз. Но отличие OpenVZ от Xen/VmWare заключается в том, что лимит на память распространяется чисто на приложения (privvmpages). В аппаратной и паравиртуализации при том же лимите памяти, приложениям памяти достанется значительно меньше, т.к. добрую ее часть займет ядро и буфера. Но взамен вы можете создать свой своп на диске.
На OpenVZ 512 метров это нормальное значение. У меня виртуалки такие держат хороший трафик.
>> а еще вопрос, что можно сделать при нехватке памяти?
Надо смотреть
# cat /proc/user_bean_counters
(точно не помню, как то так)
Там показываются все лимиты и где было превышение. Скорей всего у вас oomguarpages зашкаливает. По справедливости, оно должно быть равно privvmpages.
пасиб, а скольо вдс с 512 памяти реально держит трафа? ну с пхп+mysql, по жескому:)
nginx+apache+mysql при правильном тюнинге держит 20-50к «картиночного» трафика
О, спасибо, как раз в тему инфа. Спас от скоропалительного запуска недоделаногго сервака
Пусть сайты поживут пока на старом вдс. Перенесу как все отлажу.