Почему веб-сервер может не отвечать?

Почему веб-сервер может не отвечать?

Мы размещаем наш веб-сервис на выделенном сервере. В период высокой нагрузки сервер очень часто возвращает ошибку тайм-аута вместо страницы. У нас около 170 000 ежедневных запросов. Однако на сервере много свободной памяти, а процессор в данный момент не загружен.

Я не могу понять, почему сервер работает плохо.

Я профилировал проблемный случай с помощью утилиты tcpdump. Это хорошие и плохие сеансы, отслеженные tcpdump. Запрос одинаков в обоих экспериментах. Хороший — сервер возвращает ответ. Плохой — нет ответа, ошибка тайм-аута.

Понимаете ли вы, почему проблема возникает из этих данных? Как мне двигаться дальше, чтобы приблизиться к источнику ошибки?

Я заменил свой настоящий IP-адрес на 123.45.67.890.

---- Bad ----
12:23:36.366292 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:39.362394 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:23:45.365567 IP 123.45.67.890.61749 > myserver.superbservers.com.www: S 2125316338:2125316338(0) win 8192 <mss 1460,nop,nop,sackOK>
--------

---- Good ----
12:27:07.632229 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620946 IP 123.45.67.890.63914 > myserver.superbservers.com.www: S 3581365570:3581365570(0) win 8192 <mss 1460,nop,wscale 2,nop,nop,sackOK>
12:27:10.620969 IP myserver.superbservers.com.www > 123.45.67.890.63914: S 2654770980:2654770980(0) ack 3581365571 win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 6>
12:27:10.838747 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 1 win 4380
12:27:10.957143 IP 123.45.67.890.63914 > myserver.superbservers.com.www: P 1:213(212) ack 1 win 4380
12:27:10.957152 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 213 win 108
12:27:10.965543 IP myserver.superbservers.com.www > 123.45.67.890.63914: P 1:630(629) ack 213 win 108
12:27:10.965621 IP myserver.superbservers.com.www > 123.45.67.890.63914: F 630:630(0) ack 213 win 108
12:27:11.183540 IP 123.45.67.890.63914 > myserver.superbservers.com.www: . ack 631 win 4222
12:27:11.185657 IP 123.45.67.890.63914 > myserver.superbservers.com.www: F 213:213(0) ack 631 win 4222
12:27:11.185663 IP myserver.superbservers.com.www > 123.45.67.890.63914: . ack 214 win 108
--------

Подробная информация об услуге.

Это сервис прогноза погоды. Он написан на Perl, поддерживается MySQL. Скрипт использует несколько модулей (из CPAN и наш собственный).

Код относительно прост. Скрипт загружает погоду с другого сервера, преобразует формат данных и возвращает ответ XML. Погода кэшируется в базе данных MyISAM. Существует база данных местоположений мира (INNODB), которую также можно запросить через скрипт.

Это показатели, полученные в период высокой нагрузки.

Средний трафик: 2,5 Мбит/сек

Среднее количество пакетов: 3300 пакетов/сек

Хостер: SuperbHosting

ОС: Ubuntu

Параметры сервера: E6300 CONROE 1.86GHZ 2 X 1MB CACHE 1066 1GB DDR2 667MHZ

Это ссылка на файл конфигурации Apache, который мы используем http://repkin5.snow.prohosting.com/apache.txt

Это отчет о состоянии сервера в момент высокой нагрузки. http://repkin5.snow.prohosting.com/server-status.htm Из 120 дочерних серверов осталось всего 10, так что места для новых запросов достаточно.

Лучший снимок программы в период высокой нагрузки.

------
top - 13:21:29 up 15 days, 18:36,  1 user,  load average: 0.18, 0.19, 0.21
Tasks: 137 total,   1 running, 136 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.8%us,  1.2%sy,  0.0%ni, 92.8%id,  0.7%wa,  0.0%hi,  3.5%si,  0.0%st
Mem:   1033904k total,   590620k used,   443284k free,     6892k buffers
Swap:  3028212k total,    82556k used,  2945656k free,    64156k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 4252 mysql     20   0  162m  48m 3352 S    1  4.8 279:01.27 mysqld
14503 www-data  20   0 43280  14m 3824 S    1  1.4   0:00.16 apache2
14577 www-data  20   0 43012  13m 3500 S    1  1.4   0:00.06 apache2
14401 www-data  20   0 45076  17m 4340 S    0  1.8   0:00.46 apache2
14414 www-data  20   0 45516  18m 4344 S    0  1.8   0:00.47 apache2
14420 www-data  20   0 45624  18m 4372 S    0  1.8   0:00.61 apache2
14421 www-data  20   0 45488  18m 4352 S    0  1.8   0:00.42 apache2
14496 www-data  20   0 44820  17m 4328 S    0  1.7   0:00.18 apache2
14510 www-data  20   0 45216  17m 4300 S    0  1.8   0:00.62 apache2
    1 root      20   0  2844  456  404 S    0  0.0   0:05.24 init
    2 root      15  -5     0    0    0 S    0  0.0   0:00.00 kthreadd
    3 root      RT  -5     0    0    0 S    0  0.0   0:00.24 migration/0
    4 root      15  -5     0    0    0 S    0  0.0  32:28.85 ksoftirqd/0
    5 root      RT  -5     0    0    0 S    0  0.0   0:00.77 watchdog/0
    6 root      RT  -5     0    0    0 S    0  0.0   0:00.15 migration/1
    7 root      15  -5     0    0    0 S    0  0.0   0:03.07 ksoftirqd/1
    8 root      RT  -5     0    0    0 S    0  0.0   0:00.63 watchdog/1
-----

решение1

Ваш сервер MySQL, кажется, работает тяжело иногда (но не на вашем снимке экрана) из-за высокой загрузки процессора. Проверьте, какие запросы выполняются, выполнив команду SHOW PROCCESSLIST;в командной строке MySQL.

Также попробуйте активироватьСостояние серверастраница в Apache. С ExtendedStatus Onего помощью вы получите информацию о том, какие страницы загружаются в данный момент, и сможете увидеть, сколько открытых "слотов" осталось в Apache.

По умолчанию в Apache mpm-prefork установлено около 250 процессов максимум, что означает, что вы можете обрабатывать 250 одновременных загрузок файлов. Это может вызвать массу проблем, если у вас много посетителей, особенно если вы активировали KeepAlive. Вы увидите на странице статуса сервера, является ли это вашей проблемой.

решение2

Есть целый ряд (<--каламбур) причин, по которым Apache может не отвечать. В качестве отправной точки я бы посмотрел на server-status, предполагая, что у вас естьmod_statusвключите и посмотрите, сколько процессов запущено и выглядят ли они занятыми или нет.Эта страницаэто хорошее первое место, где можно просмотреть, что можно попробовать, если выяснится, что у вас есть проблемы с дочерними процессами.

решение3

Верхний снимок экрана показывает, что ваш сервер MySQL работает не так интенсивно! (Извините, Эмиль, но вам нужно прочитать это внимательнее или узнать больше о top).

И в списке всего 8 процессов Apache.

А средняя нагрузка составляет 0,2 при 93% простоя процессора — эта машина простаивает и ничего не делает.

В опубликованной ссылке отсутствует половина конфигурации, но, похоже, она была предварительно разветвлена.

Мое первое предположение — MaxServers установлен на какое-то странное значение, например, 10 (в зависимости от того, как выглядит ваше приложение, оно должно быть в районе 100–200).

Вы также можете проверить наличие глупостей, таких как обратный поиск во входящих соединениях или установленный mod_ident (ладно, это не так).всегдаглупо - но следует использовать с крайней осторожностью).

Конечно, установка mod_status и включение расширенного статуса дадут гораздо лучшую картину происходящего.

С.

решение4

Можете ли вы попробовать пинговать сервер (ping -f)? Я предполагаю, что есть какая-то аппаратная проблема с сетевым подключением, так как ваш сервер, похоже, не отвечает на пакеты SYN достаточно быстро.

Связанный контент