VPS с 512Mb и 360000 уников на Drupal - как это возможно?

12 3
Andreyka
На сайте с 19.02.2005
Offline
822
4286

Эксклюзивно для Се-Форума

Мне было интересно знать, сколько посетителей может выдержать сайт на движке Drupal, если разместить его на VPS с 512Mb RAM?

Сначала я подготовил VPS: взял шаблон Gentoo, собрал там GCC 4.4.1 и весь софт собрал этим GCC архитектуры i686 с безопасными флагами оптимизации под процессор (Quad Xeon):

  • php-fpm
  • nginx
  • mysql-5.1
  • memcache
  • monit

Соответственно, этот софт уже заработал на максимальную производительность - осталось дело за малым, настроить сам сервер.

Для боевой проверки я сделал копию сайта dedic.ru, отключив все исходящие коннекты. Для мониторинга в я поставил phpsysinfo - весит мало, показывает достаточно.

Сначала я сделал нагрузку с помощью siege. Что и говорить - результат был плачевным, не потянуло даже 128 посетителей в минуту - много отказов в соединениях.

Конечно, виноват был mysql. С помощью mysqltuner.pl я изменил рекомендуемые параметры и после этого mysql перестал быть проблемой.

Проблемой стал php. Уже на 150 посетителях в минуту он начал тормозить. Решением проблемы стал eAccelerator с выделенной памятью под кеш 128Mb.

После этого на VPS стало возможно запустить 250 посетителей, однако иногда коннекты внезапно обрывались. Причин тому было две - иногда "сдыхал" процесс php и mysql не вытягивал, забирая на себя 30% CPU.

Финальное решение выглядело так:

Апстрим из 2-х пулов по 2 php процесса в каждом - для отказоустойчивости

В php 128Mb на процесс и 128Mb на eaccelerator

mysql - настроен по рекомендациям mysqltuner.pl

Был установлен memcache с настройками по умолчанию

В результате система в состояние готовности занимает 73-77%, в состояние "осады" на 250 посетителей в минуту - один раз скакнуло до 84%.

Ну а вот показатели siege, тестировалось с другой VPS на этом-же сервере, команда: siege -c 250 -i -t 1m -d 5 -f urls.txt:

Lifting the server siege...      done.                                                                                                                      Transactions:                     615 hits

Availability: 100.00 %
Elapsed time: 60.46 secs
Data transferred: 10.59 MB
Response time: 16.98 secs
Transaction rate: 10.17 trans/sec
Throughput: 0.18 MB/sec
Concurrency: 172.75
Successful transactions: 287
Failed transactions: 0
Longest transaction: 24.63
Shortest transaction: 0.34

А это кусок top'а в момент "осады":

Tasks:  17 total,   6 running,  11 sleeping,   0 stopped,   0 zombie

Cpu(s): 88.2%us, 11.8%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 524288k total, 406352k used, 117936k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 0k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
13531 nobody 16 0 154m 12m 8492 R 21.9 2.5 0:08.59 php-cgi
13692 nobody 16 0 155m 13m 8492 R 18.3 2.6 0:02.80 php-cgi
13496 nobody 15 0 155m 13m 8500 R 17.3 2.6 0:12.52 php-cgi
13606 nobody 16 0 154m 12m 8492 R 13.3 2.5 0:07.98 php-cgi
22495 mysql 15 0 171m 25m 4264 S 10.3 5.0 2:14.06 mysqld
21634 memcache 15 0 73320 19m 532 S 0.7 3.9 0:07.90 memcached

Обратите внимание - в максимально отлаженной системе процессом, потребляющим больше всего CPU должен быть php, но не mysql.

А вот с памятью наоборот - лучше дать ее сколько надо, как советует mysqltuner.pl и потратив немного RAM свести потребление CPU mysql'ом к минимуму. У меня это 25Mb, совсем немного.

Да - реальный расход оперативки в колонке RES.

Так что если у вас есть проект на Drupal'е с высокой посещаемостью - можете настроить себе VPS по такой системе.

Будут вопросы - задавайте.

Не стоит плодить сущности без необходимости
M
На сайте с 16.09.2009
Offline
278
#1
Andreyka:

Сначала я подготовил VPS: взял шаблон Gentoo, собрал там GCC 4.4.1 и весь софт собрал этим GCC архитектуры i686 с безопасными флагами оптимизации под процессор (Quad Xeon):

  • php-fpm
  • nginx
  • mysql-5.1
  • memcache


Соответственно, этот софт уже заработал на максимальную производительность - осталось дело за малым, настроить сам сервер.

1. Было бы интересно, что дала гента (помимо того, что дистрибутив, видимо Вам привычный).

Т.е. аналогичный конфиг на бинарном дистрибутиве с софтом из коробки.

2. memcache - оно что-то дало? (подробностей нет)

3. Что в urls.txt?

360000 уников - порядка 10 нестатических реквестов в секунду, верно? Прям как у Вас

в тесте. Но при этом - Response time: 16.98 secs, что черезчур уж много. Неживое

оно уже. Мораль - такую нагрузку сервер не держит.

А вот сколько система может в штатном режиме? Чтобы отклик был порядка 1-5 сек.

Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().
Himiko
На сайте с 28.08.2008
Offline
560
#2

siege - это не показатель.

Как правило реальтные юзеры намного больше нагружают сервер.

Профессиональное администрирование серверов (https://systemintegra.ru). Круглосуточно. Отзывы (/ru/forum/834230) Лицензии (http://clck.ru/Qhf5) ISPManager,VDSManager,Billmanager e.t.c. по низким ценам.
Andreyka
На сайте с 19.02.2005
Offline
822
#3

1. Меньшее потребление памяти, немного шустрее работает. Но это не привычный для меня дистр - я больше по CentOS/RHEL :)

2. Да, дало - меньшая нагрузка к mysql

3. Карта сайта - каждый url в одну строку

-c 250 - это значит 250 реквестов в секунду :)

Оно живое, ибо Availability: 100.00 %, но медленное.

Если делать 100 реквестов в секунду, то скорость будет вполне нормальной:


Lifting the server siege... done. Transactions: 617 hits
Availability: 100.00 %
Elapsed time: 59.99 secs
Data transferred: 10.49 MB
Response time: 6.40 secs
Transaction rate: 10.29 trans/sec
Throughput: 0.17 MB/sec
Concurrency: 65.86
Successful transactions: 273
Failed transactions: 0
Longest transaction: 9.84
Shortest transaction: 0.64

Andreyka добавил 30.09.2009 в 19:12

Himiko:
siege - это не показатель.
Как правило реальтные юзеры намного больше нагружают сервер.

При просмотре сайта - идентично, при постинге - конечно больше. Это тест - чисто на отдачу контента друпалом.

Если есть утилита которая регается, вводит капчу и постит - с удовольствием потестирую ;)

M
На сайте с 16.09.2009
Offline
278
#4
Himiko:
siege - это не показатель.
Как правило реальтные юзеры намного больше нагружают сервер.

Что мешает Вам моделировать siege нагрузку "реальных юзеров"?

Himiko
На сайте с 28.08.2008
Offline
560
#5

По собственному опыту, siege сервер выдерживает проще, чем юзеров...

siege только скорость ответа от сервера замеряет, а всё со страницы не скачивает... (на сколько я знаю).

Могу ошибаться, в тонкости настройки не вникал.

Hack_phoenix
На сайте с 04.04.2009
Offline
57
#6

Вообще такой тест - не показатель. Ибо на продакшн-проекте, которому реально необходима ЦМС такое не возможно. Вы бы впихнули туда хотя бы Views и поквключали бы модули, поставили бы галерею фото и т.п. Тогда можно было бы смотреть... А без модулей... Нафига оно нужно? Тем более, вы тестируете OpenVZ... А какие там параметры - йа хз... М.б. там нода ненагружена и ресурсы не жестко ограничены...

...никто не узнает, как плачет ночью тот, кто идет днем по жизни смеясь... Хостинг. VPS. Мы работаем для вас. (http://hostace.ru).
M
На сайте с 16.09.2009
Offline
278
#7
Himiko:
По собственному опыту, siege сервер выдерживает проще, чем юзеров...
siege только скорость ответа от сервера замеряет, а всё со страницы не скачивает... (на сколько я знаю).

Могу ошибаться, в тонкости настройки не вникал.

Тогда вникните. Обучить его "все скачивать" с нужных страниц - не составляет труда.

Т.е. в большинстве случаев - можно даже взять статистику запросов из реального access_log и скормить siege.

Himiko
На сайте с 28.08.2008
Offline
560
#8
myhand:
Тогда вникните. Обучить его "все скачивать" с нужных страниц - не составляет труда.

Т.е. в большинстве случаев - можно даже взять статистику запросов из реального access_log и скормить siege.

Стоп. Так подскажите как, если знаете?

Статистика запросов из access_log даст только то, что запросы будут к разным url'ам.

А не при каждом запросе разных url'ов он ещё и будет всё со страницы скачивать.

P.S.: иначе получится 250к запросов к web-серверу - это реальных 50-100к. (т.к. фактически при каждом заходе юзера на страницу запрос выполняется далеко не один)

Да и вопрос не в том, можно ли научить. Дело в том, что Andreyka скармливал только карту сайта, получается это не совсем "реальные" заходы на сайты.

Andreyka
На сайте с 19.02.2005
Offline
822
#9
Hack_phoenix:
Вообще такой тест - не показатель. Ибо на продакшн-проекте, которому реально необходима ЦМС такое не возможно. Вы бы впихнули туда хотя бы Views и поквключали бы модули, поставили бы галерею фото и т.п. Тогда можно было бы смотреть... А без модулей... Нафига оно нужно? Тем более, вы тестируете OpenVZ... А какие там параметры - йа хз... М.б. там нода ненагружена и ресурсы не жестко ограничены...

Почему это такое невозможно? Возможно. Сайт dedic.ru - вполне себе продакшн сайт 😂

Если у тебя есть такой сайт, то скинь архив - я его поставлю вместо своего и прогоню со всеми модулями.

Теперь про openvz. Я лимитирую только оперативку на своих VPS, как сообщалось по ссылке. Вывод лимитов:

onesite nginx # cat /proc/user_beancounters 

Version: 2.5
uid resource held maxheld barrier limit failcnt
150: kmemsize 3445868 16603158 2147483646 2147483646 0
lockedpages 0 0 128 128 0
privvmpages 100841 134224 131072 131072 3097
shmpages 32771 32776 65536 65536 1
dummy 0 0 0 0 0
numproc 27 128 128 128 40
physpages 20257 41095 0 2147483647 0
vmguarpages 0 0 65536 2147483647 0
oomguarpages 21061 41095 65536 2147483647 0
numtcpsock 13 1209 10240 10240 9094
numflock 0 8 128 128 0
numpty 2 4 64 64 0
numsiginfo 0 41 128 128 0
tcpsndbuf 454880 7867392 53687296 57881600 0
tcprcvbuf 609824 7562192 53687296 57881600 0
othersockbuf 11600 1534272 53687296 57881600 0
dgramrcvbuf 0 8464 53687296 57881600 0
numothersock 20 163 1024 1024 0
dcachesize 285456 1182201 1179648 1179648 4104284
numfile 644 2133 3072 3072 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
dummy 0 0 0 0 0
numiptent 14 14 128 128 0

Пример куска url.txt:

193.169.218.4/node/718/

193.169.218.4/node/108/
193.169.218.4/node/644/
193.169.218.4/node/305/
193.169.218.4/node/135/
193.169.218.4/node/182/
193.169.218.4/node/446/
193.169.218.4/node/569/
193.169.218.4/node/513/
193.169.218.4/node/74/
M
На сайте с 16.09.2009
Offline
278
#10
Andreyka:
1. Меньшее потребление памяти, немного шустрее работает. Но это не привычный для меня дистр - я больше по CentOS/RHEL :)

Debian/CentOS был бы интереснее. Есть подозрение, что "компиляция" и "оптимизация" с гентой связанные - мало что дали в итоге в цифирах. // Был где-то стенд с друпалом в qemu - надо его будет помучать на досуге.

Andreyka:

-c 250 - это значит 250 реквестов в секунду :)
Оно живое, ибо Availability: 100.00 %, но медленное.

1. Человеки обычно считают > 16 сек отклик уже неживым. А ведь есть еще статика,

картинки, лаги сети...

2. Ни разу не 250 реквестов в секунду, Вас абманули :D.

Не на 250 смотрите - скорее, на Transaction rate. Вот у Вас сколько в первом тесте было: 10.17 trans/sec. А -с ключик - это не совсем то ;-) В тесте - у Вас _всего_ в минуту 287 реквестов.

Andreyka:

При просмотре сайта - идентично, при постинге - конечно больше. Это тест - чисто на отдачу контента друпалом.
Если есть утилита которая регается, вводит капчу и постит - с удовольствием потестирую ;)

Есть, которая умеет с зареганых пользователей постить ;-)

myhand добавил 30.09.2009 в 19:52

Himiko:
Стоп. Так подскажите как, если знаете?
Статистика запросов из access_log даст только то, что запросы будут к разным url'ам.
А не при каждом запросе разных url'ов он ещё и будет всё со страницы скачивать.

Ну идея проста - создать необходимую "статистическую" картину заходов на сайт. Т.е. в единицу времени спрашивать, скажем, 100 реквестов, из них 33 - url1, 31 - url2 и т.п. Для siege скармливают список url - они и повторяться могут.

Himiko:

Да и вопрос не в том, можно ли научить. Дело в том, что Andreyka скармливал только карту сайта, получается это не совсем "реальные" заходы на сайты.

Это да - я потому и задал вопрос про urls.txt в первом посте.

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий