Назад | Перейти на главную страницу

Сервер Apache не отвечает

Мы размещаем наш веб-сервис на выделенном сервере.

В период высокой нагрузки сервер очень часто возвращает ошибку тайм-аута вместо страницы.

У нас около 170 000 запросов в день.

Однако на сервере много свободной памяти, а ЦП в данный момент не загружен.

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

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

Good - server returns response.

Bad - no response, time-out error.

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

Я заменил свой реальный 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 DB. Существует база данных местоположений мира (INNODB), которую также можно запросить через скрипт.

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

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

Среднее количество пакетов: 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
-----

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

Какая платформа приложений установлена ​​поверх Apache для выполнения работы? а также крайнюю точку ресурсов, необходимую для обслуживания запроса веб-службы? Если задействована внутренняя база данных, возможна взаимоблокировка запроса на сервере базы данных.

Иногда у нас наблюдается странное поведение с сервером, который очень крут ("время безотказной работы" скажет вам), но становится очень невосприимчивым. Один из способов проверить - использовать netstat и посмотреть, сколько у вас строк. Вы также можете попробовать Apache mod_status. Наша проблема все еще не очень ясна, но она, безусловно, исходит из внешнего мира, то есть из-за возможности подключения к центру обработки данных. Машина рядом с вами может потреблять всю полосу пропускания или даже фильтровать пакеты до того, как они прибудут к вам, таким образом, воспринимаемая медлительность.

Не уверен, что это применимо к вам, но у вас, по-видимому, нет высокой нагрузки на ЦП, в то время как многие процессы apache чего-то ждут, возможно, они ждут ответов извне ... Если у вас есть "sar", это тоже может помочь.

В вашем файле /etc/apache2/apache.conf есть два раздела: mpm_prefork_module и mpm_worker_module.

StartServers          5  
MinSpareServers       5  
MaxSpareServers      10  
MaxClients          150    
MaxRequestsPerChild   0  

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