В последнее время наш веб-сервер Apache выдает нам эту ошибку несколько раз в день:
[Tue Apr 06 01:07:10 2010] [error] Server ran out of threads to serve requests. Consider raising the ThreadsPerChild setting
Мы увеличили значение параметра ThreadsPerChild с 50 до 100, но по-прежнему получаем ошибку. Наши журналы доступа показывают, что эти ошибки никогда не возникают даже в периоды высокой нагрузки. Например, вот выдержка из нашего журнала доступа (IP-адреса и некоторые URL-адреса отредактированы в целях конфиденциальности). Как видите, указанная выше ошибка произошла в 1:07, и за несколько минут, предшествовавших ошибке, было выполнено лишь небольшое количество запросов:
99.88.77.66 - - [06/Apr/2010:00:59:33 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/css/smoothness/images/ui-icons_222222_256x240.png HTTP/1.1" 304 -
99.88.77.66 - - [06/Apr/2010:00:59:34 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png HTTP/1.1" 200 111
99.88.77.66 - - [06/Apr/2010:00:59:34 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png HTTP/1.1" 200 111
99.88.77.66 - mpeu [06/Apr/2010:00:59:40 -0400] "GET /some/dynamic/content HTTP/1.1" 200 145049
55.44.33.22 - mpeu [06/Apr/2010:01:06:56 -0400] "GET /other/dynamic/content HTTP/1.1" 200 12311
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/css/smoothness/jquery-ui-1.7.1.custom.css HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/js/jquery-1.3.2.min.js HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/js/jquery-ui-1.7.1.custom.min.js HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/jquery.tablesorter.min.js HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/date.js HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/pdfs/image1.gif HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/pdfs/image2.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/pdfs/image3.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/pdfs/image4.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/pdfs/image5.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/pdfs/image6.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:56 -0400] "GET /WebRepository/pdfs/image7.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:57 -0400] "GET /WebRepository/pdfs/image8.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:57 -0400] "GET /WebRepository/pdfs/image9.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:57 -0400] "GET /WebRepository/pdfs/imageA.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:57 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:59 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png HTTP/1.1" 304 -
55.44.33.22 - - [06/Apr/2010:01:06:59 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png HTTP/1.1" 200 110
55.44.33.22 - - [06/Apr/2010:01:06:59 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png HTTP/1.1" 200 110
11.22.33.44 - mpeu [06/Apr/2010:01:18:03 -0400] "GET /other/dynamic/content HTTP/1.1" 200 12311
11.22.33.44 - - [06/Apr/2010:01:18:03 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/js/jquery-1.3.2.min.js HTTP/1.1" 304 -
11.22.33.44 - - [06/Apr/2010:01:18:04 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/css/smoothness/jquery-ui-1.7.1.custom.css HTTP/1.1" 200 27374
11.22.33.44 - - [06/Apr/2010:01:18:04 -0400] "GET /WebRepository/jquery/jquery-ui-1.7.1.custom/js/jquery-ui-1.7.1.custom.min.js HTTP/1.1" 304 -
11.22.33.44 - - [06/Apr/2010:01:18:04 -0400] "GET /WebRepository/jquery.tablesorter.min.js HTTP/1.1" 200 12795
11.22.33.44 - - [06/Apr/2010:01:18:04 -0400] "GET /WebRepository/date.js HTTP/1.1" 200 25809
Как бы то ни было, мы запускаем версию Apache, которая поставляется с Oracle 10g (примерно версия 2.0), и мы используем mod_plsql
для создания нашего динамического контента. Поскольку сервер Apache работает как отдельный процесс и база данных не регистрирует никаких проблем при возникновении этой ошибки, я сомневаюсь, что проблема в Oracle.
К сожалению, ошибки пугают наших системных администраторов, которые склонны винить в этой ошибке все проблемы, возникающие с сервером. Это известная ошибка в Apache, которую я просто не смог найти в Google?
РЕДАКТИРОВАТЬ: По запросу Эмбро, вот настройки, которые мы используем (обратите внимание, что специфичные для Unix, такие как MinSpareServers, закомментированы) [ДРУГОЕ ИЗМЕНЕНИЕ - кроме ThreadsPerChild
это всего лишь значения по умолчанию, которые существовали при установке]:
ServerType standalone
Timeout 300
SendBufferSize 16384
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MaxRequestsPerChild 0
ThreadsPerChild 100
#MinSpareServers 5
#MaxSpareServers 20
#MaxClients 150
ДАЛЬНЕЙШЕЕ РЕДАКТИРОВАНИЕ: это система Windows Server 2003, работающая на 64-разрядном сервере Itanium 2 с тактовой частотой 1,6 ГГц и 16 ГБ ОЗУ. Мы начали вести журнал, чтобы определить, насколько загружен сервер при возникновении этих ошибок; наши журналы Apache показывают, что почти никто не посещает веб-сайт, но в фоновом режиме происходят процессы сбора данных, поэтому, возможно, один из них достаточно замедлил Apache, чтобы вызвать какие-то проблемы или что-то в этом роде.
Ваше значение тайм-аута установлено на 300 секунд, что составляет 5 минут, установите более разумное значение, например 15 или 30 секунд.
Теперь ваша проблема может быть связана со значением ThreadsPerChild. Установите его как минимум на 250. Пожалуйста, следите за изменениями в диспетчере задач под нагрузкой, чтобы убедиться, что они не излишни (вероятно, это не так, я установил его выше на некоторых старых одноядерных процессорах, обслуживающих загруженные сайты).
Если я правильно понял, это ОС Windows? Если да, то какое и на каком оборудовании? (ЦП и память)
Хотя ваши параметры конфигурации нуждаются в улучшении, например, о чем упоминал Эмбро, они не могут быть прямой причиной.
Возможно, проблема связана с вашим приложением или чем-то в стеке.
Например, если ваше приложение ожидает ответа от базы данных, это может в конечном итоге привести к тому, что все потоки будут ждать, что вызовет проблемы даже при низкой нагрузке. Примером такой производительности может служить перемешивание активных соединений с базой данных.
Такую же производительность может показать ошибка приложения, и ее будет труднее изолировать. Хотя это правда, но, если нет никаких намеков на то, что это является причиной, я бы сначала сосредоточился на двух вещах ниже.
Есть ли конкретная причина, по которой у вас ThreadsPerChild
или SendBufferSize
настраивал вообще? С участием ThreadsPerChild
, если нет особой необходимости или вы должным образом не продумали его использование, значение по умолчанию должно подойти. Если он не настроен должным образом, он может исчерпать физическую память и начать подкачку, что снизит производительность.
MaxRequestsPerChild
установлен в 0
неразумно. Если в вашем приложении есть утечки памяти, дочерние элементы Apache никогда не будут переработаны. Вы хотите их переработать.
Я предполагаю, что вы разработчик. Системные администраторы должны тесно сотрудничать с вами, чтобы решить эту проблему, поскольку это определенно межфункциональная проблема.