Настройка сервера под высокую нагрузку

H1
На сайте с 07.11.2007
Offline
60
15113

Возникла вчера непонятная для меня проблема при огромном числе посетителей. При первом открытии сайта страница грузилась очень долго (точнее долго не соединялось). То что видел я лично - от 5 до 15 секунд. Проверка по хост-трекеру давала от 3 до 10 таймаутов соединения (в т.ч. несколько Unknown reason). После того как соединение установилось - страница открывались мгновенно, все последующие страницы - тоже. Можно было бы предположить, что в этом случае помогал keep_alive, но он установлен всего на 15 секунд, в то время как страницы нормально открывались и через несколько минут простоя. Сначала сам проверил все логи и никаких ошибок не нашёл, затем попросил сотрудника из systemintegra посмотреть (хвала им за то, что в новогоднюю ночь работают и цены не меняют!) - Антон также подтвердил что никаких ошибок на сервере нет. Ресурсы - в избытке. Всё время top выглядел примерно следующим образом:

top - 20:24:40 up 1 day, 17:31, 1 user, load average: 0.37, 0.40, 0.43

Tasks: 110 total, 1 running, 109 sleeping, 0 stopped, 0 zombie

Cpu(s): 6.3%us, 2.1%sy, 0.0%ni, 90.7%id, 0.2%wa, 0.0%hi, 0.7%si, 0.0%st

Mem: 4055312k total, 1884468k used, 2170844k free, 51952k buffers

Swap: 2104508k total, 0k used, 2104508k free, 1321688k cached

Канал загружен был от силы на 50%. Постоянное обновление server-status апача показывало, что одновременно работает максимум 2-3 соединения. Количество запросов в секунду >100 (статику раздаёт nginx). Т.е. вроде бы и апач не был перегружен. Начал было грешить на проблемы хостера/дата-центра, но можно сказать чудом в новогоднюю ночь удалось пообщаться с руководством дата-центра и мне сказали что проблем нет. Получается что проблема была именно в моём сервере. А дальше чисто случайно обнаружил такую вещь - если рестартануть апач или nginx, то сайт какое-то время сразу открывался мгновенно и ошибок по хост-трекеру вообще не было. Спустя какое-то время всё становлось как было - и частичная недоступность по хост-трекеру, и медленное первое открытие. Когда трафик немного спал - проблема исчезла сама собой.

Такое ощущение, что где-то какая-то очередь забивалась и из-за этого были такие проблемы. Может быть кто-то сможет подсказать в каком направлении стоит "копать"?

Спасибо.

M
На сайте с 16.09.2009
Offline
278
#1
homer18:
Может быть кто-то сможет подсказать в каком направлении стоит "копать"?

Доверять решение проблем тем, кто это умеет. Покуда не стало поздно. Может теперь вы поняли почему люди покупают услуги администрирования, в то время как "все работает"...

Ничего плохого не хочу сказать про systemintegra - но имея явно максимум информации (были на месте) - они не узнали абсолютно ничего существенного. Боюсь, без существенно более полной информации от вас (тот же вывод mod_status на момент проблемы, top, mysql processlist, статистика munin, настройки _всех_ замешанных сервисов от nginx до апача/sql, и т.п. и т.д.) - угадайки от местных телепатов будут еще менее полезны.

Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().
H1
На сайте с 07.11.2007
Offline
60
#2
myhand:
Доверять решение проблем тем, кто это умеет.

Дак тут на форуме каждый второй пишет что он профессионал и "ацкий сотона". Как определить кто действительно умеет?

Ничего плохого не хочу сказать про systemintegra - но имея явно максимум информации (были на месте) - они не узнали абсолютно ничего существенного.

Аналогично ничего сказать не могу. Но почему такого не может быть, что действительно на первый взгляд (т.е. просмотрев стандартный набор параметров) - действительно ничего криминального не было видно? Ведь, теоретически, в медленном коннекте и провалах на хост-трекере мог быть виноват хостер? Это я уже позже выяснил, что у него проблем не было.

Боюсь, без существенно более полной информации от вас (тот же вывод mod_status на момент проблемы, top, mysql processlist, статистика munin, настройки _всех_ замешанных сервисов от nginx до апача/sql, и т.п. и т.д.) - угадайки от местных телепатов будут еще менее полезны.

mod_status - описывал в первом посте: ничего особенного там не было. висит 10 свободных процессов (maxclients стоит 150), из них при постоянном обновлении - занято было 2-3, а то и вообще один.

top - прикладывал выше, на протяжении нескольких часов особых изменений также не было.

mysql - фактически не использовался. Сайт самописный - ещё до роста нагрузки я включил своё собственное "кэширование" (страница один раз генерируется и валяется обычным файлом на tmpfs диске. php скрипт проверяет есть ли файл, если есть - считывает его и отдаёт. Запросы к БД отсутствуют).

munin - каюсь, отсутствует. надо будет поставить.

настройки всех сервисов - в целом стандартные для debian 5 + ispmanager lite.

За исключением увеличенных worker_processes до 4, worker_connections 4000 и worker_rlimit_nofile 16000, keep_alive 15 для nginx. Возможно, что-то ещё по мелочи, что не должно оказывать существенного влияния на производительность.

M
На сайте с 01.12.2009
Offline
235
#3

Согласен с myhand - надо смотреть.

homer18
Дак тут на форуме каждый второй пишет что он профессионал и "ацкий сотона". Как определить кто действительно умеет?

TC - myhand не кричит, что он Адский СоТоНа ;)

myhand - мне вот что понравилось ;)


Антон также подтвердил что никаких ошибок на сервере нет.

В то время как сайты тупят, сотрудник из systemintegra - говoрит нету ошибок ;) новогодняя сказка ;)

Администратор Linux,Freebsd. построения крупных проектов.
zexis
На сайте с 09.08.2005
Offline
388
#4

1. У вас выделенный сервер или VPS?

2. Первая страница долго грузится у каждого нового посетителя или только у первых посетителей?

3. Попробуйте зайти сразу на бэкенд http://site.ru:8080/ Проблема в этом случае остается?

4. Попробуйте зайти сразу на бэкенд по IP http://11.22.33.44:8080/ (сайт сделайте сайтом по умолчанию) Проблема в этом случае остается?

H1
На сайте с 07.11.2007
Offline
60
#5
zexis:
1. У вас выделенный сервер или VPS?
2. Первая страница долго грузится у каждого нового посетителя или только у первых посетителей?
3. Попробуйте зайти сразу на бэкенд http://site.ru:8080/ Проблема в этом случае остается?
4. Попробуйте зайти сразу на бэкенд по IP http://11.22.33.44:8080/ Проблема в этом случае остается?

1. Да, выделенный. Core 2 Quad 8300, 4GB.

2. За каждого я не могу говорить, но проверялось с 3х компов (2 разных провайдера) и первое открытие сайта (любой страницы) - происходило медленно. По ощущениям - даже не открытие, а именно соединение. Все последующие запросы к сайту отрабатывались мгновенно. Если даже ничего не открывать в течении нескольких минут (я не засекал, но минут 10 проходило, а то и больше) - а потом снова открыть сайт, то он открывался мгновенно. Если подождать дольше - то снова первое соединение происходило медленно.

3,4. Не догадался проверить :( Сейчас-то уже поздно :) как трафик упал меньше 70-80 запросов к апачу в секунду - всё нормализовалось.

На проблемы с ДНС не было похоже. К сожалению не сохранил результаты проверки site-perf, там больше всего времени (по 5 секунд и больше) тратилось на "connect" (красная полоска), а с некоторых источников - вообще с первой попытки не соединяло, только со второй. причем если запускать повторно - то отрабатывало быстро.

M
На сайте с 16.09.2009
Offline
278
#6
homer18:
Аналогично ничего сказать не могу. Но почему такого не может быть, что действительно на первый взгляд (т.е. просмотрев стандартный набор параметров) - действительно ничего криминального не было видно?

Вы поставили задачу "определи мне причину такой-то проблемы" или "посмотри что криминального"?

homer18:
Как определить кто действительно умеет?

Например, не берется за задачу, если не может ее выполнить или она глупа.

homer18:
Сайт самописный - ещё до роста нагрузки я включил своё собственное "кэширование" (страница один раз генерируется и валяется обычным файлом на tmpfs диске. php скрипт проверяет есть ли файл, если есть - считывает его и отдаёт. Запросы к БД отсутствуют).

Может и в этом дело.

homer18:
Возможно, что-то ещё по мелочи, что не должно оказывать существенного влияния на производительность.

Дъявол в мелочах. Не хотите предоставлять информацию - продолжайте надеяться на телепатов.

zexis:
1. У вас выделенный сервер или VPS?

Тебе не видно?

homer18:
По ощущениям - даже не открытие, а именно соединение.

Может ДНС. Проблема повторялась, если попытаться через несколько минут с того же клиента? Либо тот самый "кеш".

homer18:
3,4. Не догадался проверить :( Сейчас-то уже поздно :)

Чудо, man ab осилишь самостоятельно?

-Mouse-
На сайте с 26.03.2007
Offline
108
#7

homer18, у нас была похожая ситуация на похожей конфигурации сервера, кроме одного момента - LA взлетал до 25.0 - 30.0 и держался до 10 минут. Оказалось что, самописные движки сыпали всякий хлам в error.log и ежедневная ротация логов (00:00 по МСК) совпадала со временем пикового посещения посетителей (22.00 по Украине). Ребята из systemintegra заметили и подправили ротацию.

А вообще Вам надо приглашать админа чтобы наблюдал. На форуме, в слепую, Вы диагноз не узнаете ...

M
На сайте с 01.12.2009
Offline
235
#8
-Mouse-:
homer18, у нас была похожая ситуация на похожей конфигурации сервера, кроме одного момента - LA взлетал до 25.0 - 30.0 и держался до 10 минут. Оказалось что, самописные движки сыпали всякий хлам в error.log и ежедневная ротация логов (00:00 по МСК) совпадала со временем пикового посещения посетителей (22.00 по Украине). Ребята из systemintegra заметили и подправили ротацию.

А вообще Вам надо приглашать админа чтобы наблюдал. На форуме, в слепую, Вы диагноз не узнаете ...

Что-бы вы знали, на будущее, у вас разные ситуации ( земля и небо )

M
На сайте с 16.09.2009
Offline
278
#9
madoff:
Что-бы вы знали, на будущее, у вас разные ситуации ( земля и небо )

Одинаковые. "Все итак работает, а если я замечу проблему - придет валшебник и исправит за 5 минут и 5$" (тм)

H1
На сайте с 07.11.2007
Offline
60
#10
myhand:
Чудо, man ab осилишь самостоятельно?

По манере общения сразу видно - профессионал.

Document Path: /

Document Length: 21841 bytes

Concurrency Level: 100

Time taken for tests: 1.838 seconds

Complete requests: 2000

Failed requests: 368

(Connect: 0, Receive: 0, Length: 368, Exceptions: 0)

Write errors: 0

Total transferred: 43995608 bytes

HTML transferred: 43681608 bytes

Requests per second: 1087.86 [#/sec] (mean)

Time per request: 91.923 [ms] (mean)

Time per request: 0.919 [ms] (mean, across all concurrent requests)

Transfer rate: 23369.75 [Kbytes/sec] received

Connection Times (ms)

min mean[+/-sd] median max

Connect: 0 0 1.1 0 6

Processing: 5 89 11.3 91 108

Waiting: 3 89 11.4 91 108

Total: 8 90 10.6 91 108

Percentage of the requests served within a certain time (ms)

50% 91

66% 93

75% 94

80% 94

90% 96

95% 98

98% 100

99% 102

100% 108 (longest request)

Посмотрел в логах почему 368 Failed - там размер у них на 1 байт отличается.

P.S. Сервер сейчас под нагрузкой. По статистике LiveInternet >5000 online. Проблемы были вчера когда онлайн было >25000.

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