Виртуалке явно не хватает памяти [message #38667] |
Thu, 14 January 2010 09:56  |
Artemiy117
Messages: 11 Registered: January 2010
|
Junior Member |
|
|
Создал виртуалку на Debian i386
Выделил ей квоту в 30% проца от 2-х Xeon'ов и 512 Mb оперативки.
Водрузил на неё Apache2+MySQL+PHP5+vsftpd
Кинул на неё два сайта с хорошей посещаемостью.
И утром началось. Cannot allocate memory и все такое.
Пришлось увеличить privvmpages в два раза.
Вот что пишет:
Version: 2.5
uid resource held maxheld barrier limit failcnt
1: kmemsize 5896578 14965798 41625840 61405600 0
lockedpages 0 96 256 256 2
privvmpages 110038 279368 262144 278528 7429
shmpages 656 1312 21504 21504 0
dummy 0 0 0 0 0
numproc 51 108 240 240 0
physpages 33886 71506 0 9223372036854775807 0
vmguarpages 0 0 131072 9223372036854775807 0
oomguarpages 33886 71506 26112 9223372036854775807 0
numtcpsock 13 81 360 360 0
numflock 6 11 188 206 0
numpty 1 2 16 16 0
numsiginfo 0 37 256 256 0
tcpsndbuf 205512 920816 1720320 2703360 0
tcprcvbuf 167472 357136 1720320 2703360 0
othersockbuf 148960 845440 1126080 2097152 56
dgramrcvbuf 0 4360 262144 262144 0
numothersock 113 130 140 140 154
dcachesize 490158 617862 3409920 3624960 0
numfile 1126 1661 9312 9312 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
numiptent 10 10 128 128 0
Вопрос: можно её как-то заставить работать на 512 мегах оперативки и что для этого нужно сделать с виртуалкой?
numothersock я поднимал с 120 до 140.
Я правильно понимаю, что нужно добиться чтобы в идеале failcnt стремился к нулю?
|
|
|
Re: Виртуалке явно не хватает памяти [message #38693 is a reply to message #38667] |
Sat, 16 January 2010 15:34   |
RXL_
Messages: 147 Registered: July 2009 Location: Moscow/Russia
|
Senior Member |
|
|
Отграничивать Apache, PHP и MySQL по используемой памяти.
Для Апача - снизить число процессов, для PHP - выставить лимит памяти на процесс, для MySQL - задать максимум подключений и пересмотреть размеры буферов.
Снизить нагрузку на связку Apache/PHP можно поставив reverse proxy, например - Nginx. Прокси задать правила отдавать статичные файлы, а запросы к динамическим данным переадресовывать к Apache.
Снижению нагрузки отчасти способствует кеш предкомпиленных файлов PHP: APC или eAccelerator. Но как любой кеш, он тоже потребляет память (регулируется).
Прежде чем вносить любое изменение следует собрать статистику посещаемости, максимальное число одновременных процессов Apache, одновременных сессий MySQL. Также стоит помониторить - кто из сервисов сколько памяти потребляет.
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
[Updated on: Sat, 16 January 2010 15:36] Report message to a moderator
|
|
|
Re: Виртуалке явно не хватает памяти [message #38696 is a reply to message #38667] |
Sat, 16 January 2010 17:06   |
Artemiy117
Messages: 11 Registered: January 2010
|
Junior Member |
|
|
В основном в процессах первые строчки занимает MySQL.
top - 20:00:54 up 1 day, 19:21, 1 user, load average: 0.14, 0.12, 0.09
Tasks: 34 total, 1 running, 33 sleeping, 0 stopped, 0 zombie
Cpu(s): 3.2%us, 0.2%sy, 0.0%ni, 96.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1048576k total, 433480k used, 615096k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 0k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19382 www-data 20 0 34736 9524 4080 S 8 0.9 0:01.98 apache2
390 mysql 20 0 130m 51m 5392 S 2 5.1 60:26.53 mysqld
Рою в инете как ему гайки закрутить. Хоть это и оффтоп, но может кто поделится опытом или ссылку какую даст?
Переводить все на Nginx нет никакого желания. Я в первом посте написал, что хочу эту связку заставить работать на 512Mb. Но за советы все равно спасибо.
|
|
|
Re: Виртуалке явно не хватает памяти [message #38698 is a reply to message #38696] |
Sat, 16 January 2010 21:37  |
RXL_
Messages: 147 Registered: July 2009 Location: Moscow/Russia
|
Senior Member |
|
|
Анализ и еще раз анализ!
Прежде всего, запретите загрузку всех ненужных модулей Apache и PHP и перезапустите Apache.
Анализ начните с PHP: определите, сколько памяти достаточно вашим web-приложениям (МБ на процесс)? От этой величины можно уже предположить, сколько процессов Apacha можно запустить и сколько подключений MySQL потребуется.
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|