LINUX.ORG.RU
ФорумAdmin

apache не отвечает на запросы (request timed out)


0

0

сегодня у меня взял и сам собой сломался веб сервер. перезагружаю апач

# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]

- в error_log'е никаких ошибок нет:

> [Thu Dec 17 21:22:16 2009] [notice] Apache/2.2.3 (CentOS) configured — resuming normal operations

но сайт в браузере не открывается, request timed out. telnet так же говорит про тайм аут. фаервол подключения точно не блокирует, т.к если повесить на 80ый порт nc, то telnet нормально подключается.

конфиг апача я не правил несколько дней, и, судя по access_log, сервер нормально работал где-то до 16.30 сего дня.

куда копать?

оказывается, в логах нет ошибок только сразу после рестарта, а потом там

[Thu Dec 17 22:55:31 2009] [notice] Apache/2.2.3 (CentOS) configured — resuming normal operations

[Thu Dec 17 22:55:46 2009] [error] server reached MaxClients setting, consider raising the MaxClients setting



но я и так увеличил MaxClients до 1000. чем это может быть чревато?(default для prefork'а - 256) чем это может быть обусловлено? часом не попыткой ддоса апача?
1000 посетителей одновременно точно быть не может.

opensuse ()
Ответ на: комментарий от opensuse

> но я и так увеличил MaxClients до 1000. чем это может быть чревато?

Тем, что процессы апача захавают всю доступную память (в том числе залезут в свап, а в некоторых случаях израсходуют свап целиком - вот тогда и начинается самое интересное). ЕМНИП одновременно с MaxClients нужно увеличить и ServerLimit (если серверов больше 256, например, как у тебя).

(default для prefork'а - 256) чем это может быть обусловлено?


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

часом не попыткой ддоса апача?


Посмотри access.log в конце концов. +Есть куча утилит вродe apachetop и подобных.

oc ()
Ответ на: комментарий от oc

в access.log ничего интересного - очень мало запросов.
я заметил, что эта ошибка появляется при _первом же_ запросе к серверу, и нагуглил подобную:

My Apache server goes up and down very frequently. When i checked the Logs it says :

[Wed Apr 20 23:24:14 2005] [error] server reached MaxClients setting, consider raising the MaxClients setting


[Wed Apr 20 23:26:05 2005] [error] server reached MaxClients setting, consider raising the MaxClients setting


So Restart Apache by increasing the MaxClient then it works Fine. After the restart whenever a new request comes it again reaches the Maxclient to the limit and gives similar Message in the error_log and Apache Goes down.



http://www.experts-exchange.com/Software/Server_Software/Web_Servers/Apache/Q...

сейчас попробую там зарегиться и посмотреть предложенное решение.

opensuse ()
Ответ на: комментарий от opensuse

ну собственно я там зареган, вот солюшен:

ramazanyich

First of all you should try to understand what is the load of your server by using mod_status. Second you should check access.log file to see that you are not attacked by some one and try to disable access to that IP address (or address range)

osingh

Hi,

Thanks for your response.

We have confirmed that there was no attack on our website during that time.

We are expecting a maximum of 3000 concurrent user on our website, and we have 3 web server , each running 3 pairs of ssl and non ssl instances of apache.The server has only 4 GB of RAM. What value of MaxClient user will be good enough to handle this load?

All help will be appretiated.

ramazanyich

check http://modperlbook.org/html/ch11_01.html . on that URL you will find some calculations for maxclients based on amount of memory which do you have.

oc ()
Ответ на: комментарий от oc

соль в том, что апач падает и при maxclients 32(было изначально), и при maxclients 1000, при получении первого же запроса.
причем до сегодняшнего дня(точнее, вечера - днем сервер еще работал) я конфиг даже и не трогал, и все работало.
что с апачем случилось - хз.

opensuse ()
Ответ на: комментарий от oc

я заметил, что если поставить MaxClients выше 1000 и ниже 30, то сервер падает при первом же подключении, а при MaxClients около 100 живет пару минут.
засим меня заело подбирать верные значения и я повесил на крон скрипт, перезагружающий апач каждую минуту, если апач лежит.

opensuse ()

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

ну и да, access_log смотреть все равно придется.

dmiceman ★★★★★ ()
Ответ на: комментарий от dmiceman

точно апач. скрипты изредка гадят в еррор_лог, но они с базой не работают(а те, что работают, не гадят :) )

в access_log обычная фигня, вроде

> 67.218.116.132 - - [18/Dec/2009:03:11:03 +0300] «GET /robots.txt HTTP/1.0» 403 212 "-" «Mozilla/5.0 (Twiceler-0.9 http://www.cuil.com/twiceler/robot.html

на данный момент конфигурация такая:

Timeout 20
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 5
# prefork MPM
<IfModule prefork.c>
StartServers 2
MinSpareServers 2
MaxSpareServers 4
ServerLimit 128
MaxClients 64
MaxRequestsPerChild 100
ListenBacklog 10
</IfModule>

как можно улучшить эти параметры? нагрузка на сервер минимальная(не больше 10 хитов в минуту).

opensuse ()
Ответ на: комментарий от dmiceman

[code]CPU load averages   0.01 (1 min) 0.10 (5 mins) 0.13 (15 mins)
Real memory   1024 MB total, 279.70 MB used[/code]

- нагрузка никакая.
ядер много, но выделено 600 мгц (это VDS)

opensuse ()
Ответ на: комментарий от opensuse

нуу… не трогай ты MaxClients. скорее всего, оно и при дефолте работать должно.

проблема где-то в каком-то локе. какие-то скрипты чего-то ждут. хакай скрипты, добавляй отладку типа «вошел-вышел».

dmiceman ★★★★★ ()
Ответ на: комментарий от dmiceman

> проблема где-то в каком-то локе. какие-то скрипты чего-то ждут.

как можно это определить? выкидывать абсолютно все и добавлять по одному скрипту не хочу.

opensuse ()
Ответ на: комментарий от opensuse

Посмотрите netstat'ом количество установленных соединений в момент зависания, може. Может кончились inode на ФС.

На скритпы есть ограничение по времени выполнения? Есть сообщения в логи об ошибках таймаута.

Кстати, если апач начал выполнять скрипт, тот ушёл в бесконечное ожидание, то об этом вобще будет запись в access.log? Туда ведь вроде одной строкой пишется при завершении.

mky ★★★★★ ()
Ответ на: комментарий от mky

да я уже заметил. это http flood :) я по привычке netstat -luntp пишу, а он все коннекты сворачивает. когда я просто netstat написал, я ужаснулся :)

tcp        0      0 fakmoymozg.ru:http          host-87-255-1-:ifsf-hb-port SYN_RECV
tcp        0      0 fakmoymozg.ru:http          len50a.convex.ru:33744      SYN_RECV
tcp        0      0 fakmoymozg.ru:http          nat168-sin.ural.net:64520   SYN_RECV
tcp        0      0 fakmoymozg.ru:http          node-161-52.do:4-tieropmcli SYN_RECV
tcp        0      0 fakmoymozg.ru:http          x1-6-00-24-01-34-09-c6:3370 SYN_RECV
tcp        0      0 fakmoymozg.ru:http          g224131089.adsl.aliced:4784 SYN_RECV
tcp        0      0 fakmoymozg.ru:http          nat168-sin.ural.net:56165   SYN_RECV
# netstat | grep ESTAB | wc -l
132                  

пользуясь случаем, спрошу, у кого-нибудь есть скрипт автобана? самому быдлокодить лениво :)

opensuse ()

значит кто-то выжирает коннекты и не отправляет запросы. Тут уже смотри всякие netstat -apn | egrep 'http|apache'

Будь человеком, поставь nginx сверху :).

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

уже.

netstat -n --numeric-hosts > netstats
cat netstats | sed '<тут_тонна_быдлокода>' > ips
for i in cat ips; do
/sbin/iptables -I INPUT -s $i -j DROP
done

всех перебанил :)

opensuse ()
Ответ на: комментарий от true_admin

в смысле, «уже» - не про энжынкс.

я вообще собираюсь поставить один энжынкс вместо апача. стоит ли? какие плюсы? минусы?
требуется базовый набор - веб-сервер, php, mysql.

opensuse ()
Ответ на: комментарий от opensuse

Да сами отвалятся. Хотя можно попробовать http://www.linux.org.ru/view-message.jsp?msgid=3602199 но, по идее для правильной генерации FIN пакетов нужно получить хотя бы один пакет для определения sequence number.

А «netstat -l» не «сворачивает коннекты», а показывает только «слушаемые» порты.

mky ★★★★★ ()
Ответ на: комментарий от opensuse

как разорвать все FIN_WAIT1 соединения? глаза мозолят

таймауты крути.

я вообще собираюсь поставить один энжынкс вместо апача. стоит ли? какие плюсы?

Это ты сам уже решаешь стоит того или нет. Если тебе .htaccess не нужны и нет кучи реврайтов которые надо править а так же код совместим с fcgi то тогда можно сделать.

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

.htaccess как раз нужны. в энжынксе разве нет подобия апачевских хтаксесов? это грустно.
код на уровне детского сада, так что с ним проблем не будет :)

opensuse ()
Ответ на: комментарий от opensuse

это грустно.

".htaccess и высокие нагрузки несовместимы" (c) Игорь Сысоев, разработчик nginx

true_admin ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.