Решение проблемы с ошибкой AH00341: winnt_accept: Asynchronous AcceptEx failed на сервере Apache

Довольно внезапно, мой сервер стал сбоить. Внешне это выглядело как отсутствие ответа от сервера, которое может быть вызвано, например, большой загруженностью. Быстрый анализ показал, что в моменты, когда сервер не отвечает, он не загружен. Ошибка появлялась произвольно, я связываю её с попыткой загрузки страниц, использующих ajax. Временно устранить ошибку помогал только перезапуск сервера. 

Информация о компьютере с сервером: Windows x64, Apache x64. Хотя, как выяснилось позже, эта проблема уже довольно древняя и встречалась и на предыдущих версиях Apache.

Я посмотрел логи ошибок сервера и увидел там следующее:

[Thu Jun 05 07:24:55.747090 2014] [mpm_winnt:notice] [pid 1784:tid 444] AH00455: Apache/2.4.9 (Win64) PHP/5.5.13 configured -- resuming normal operations
[Thu Jun 05 07:24:55.747090 2014] [mpm_winnt:notice] [pid 1784:tid 444] AH00456: Apache Lounge VC11 Server built: Mar 16 2014 12:42:59
[Thu Jun 05 07:24:55.747090 2014] [core:notice] [pid 1784:tid 444] AH00094: Command line: 'c:\Server\bin\Apache24\bin\httpd.exe -d C:/Server/bin/Apache24'
[Thu Jun 05 07:24:55.748090 2014] [mpm_winnt:notice] [pid 1784:tid 444] AH00418: Parent: Created child process 4952
[Thu Jun 05 07:24:55.957978 2014] [mpm_winnt:notice] [pid 4952:tid 388] AH00354: Child: Starting 64 worker threads.
[Thu Jun 05 07:26:16.695036 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно.  : AH00341: winnt_accept: Asynchronous AcceptEx failed.
[Thu Jun 05 07:26:16.695036 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно.  : AH00341: winnt_accept: Asynchronous AcceptEx failed.
[Thu Jun 05 07:26:48.250710 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно.  : AH00341: winnt_accept: Asynchronous AcceptEx failed.
[Thu Jun 05 07:26:48.250710 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно.  : AH00341: winnt_accept: Asynchronous AcceptEx failed.
[Thu Jun 05 07:29:27.137784 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно.  : AH00341: winnt_accept: Asynchronous AcceptEx failed.
[Thu Jun 05 07:29:27.137784 2014] [mpm_winnt:warn] [pid 4952:tid 1112] (OS 64)Указанное сетевое имя более недоступно.  : AH00341: winnt_accept: Asynchronous AcceptEx failed.

Гугление вывело меня на баг-репорты и на форумы по Apache. По итогам чтения, появились две новости: хорошая и плохая. Плохая новость заключается в том, что эта ошибка появляется на Apache версий 2.2 и 2.4 и при этом точного ответа, с чем она связана, нет. Зато хорошая новость заключается в том, что есть решение этой проблемы! В файл httpd.conf нужно добавить следующие строки:

Для 2.2: 

Win32DisableAcceptEx 
EnableSendfile off 
EnableMMAP off 

Для 2.4: 

AcceptFilter http none 
AcceptFilter https none 
EnableSendfile off 
EnableMMAP off 

Я не знаю, что именно делают эти настройки — т.к. авторы, которые их предложили, этот вопрос не раскрыли. Но это работает! Это могу подтвердить я, а также подтверждают другие, кто сталкивался с этой проблемой.


Следующим шагом, после настройки и тестирования сайта на локалхосте, является выбор качественного и дешёвого интернет хостинга. Я перебрал довольно много решений и нашёл очень хороший вариант — 100 рублей в месяц! За эти деньги даётся профессиональный хостинг, с отличным аптаймом, с бесплатным доменом второго уровня в подарок (!), с 2 гигабайтами места на SSD диске, с неограниченным количеством баз данных, с возможностью подключать неограниченное количество новых доменов (платить придётся только за каждый новый домен — 139 рублей). Вообще, всего хорошего так много, что проще всего посмотреть это здесь.

Кстати, а ведь как здорово иметь собственное доменное имя! Хотя бы для того, чтобы сделать для себя красивый почтовый ящик, вместо чего-нибудь вроде vovan_pupkin_murom1995@mail.ru. Вот здесь можно найти свой собственный домен. Например, я получил бесплатно домен codeby.net, я могу делать почтовые ящики: admin@codeby.net, alex@codeby.net, al@codeby.net и так далее — количество ящиков ничем не ограничено!

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

2 комментария

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *