Кстати в других местах всё нормально? Сбои где-нибудь наблюдаются?
Нет, в остальном все в полном порядке. Подправил скрипт - все вернулось в норму. В день где-то около 300К запросов, ничего больше не зависает, хотя есть более сложные скрипты.
Bazis007:
как много тех и других? В идеале увидеть бы всю картину.
Кстати W - Судя по всему - это живые
В основном все W, G - лишь парочку видел. Как много - ну в среднем 2-3 процесса в минуту зависали, когда ставил maxrequestperchild=1. Всего в день запросов к этому скрипту около 10К.
Логика такая: делаю запрос к imageshack.us, отправляю через GET url фотографии, которую этот сайт должен скачать с моего сайта (статика через nginx). Иногда с первого раза не получается, поэтому делаю через цикл, пока не получится верный ответ. По идее, это дело может зависнуть, но через 2 минуты PHP должен остановить скрипт, ну и апач - убить процесс. Когда убрал цикл - т.е. передача данных всего один раз, апач стал нормально работать.
Andreyka: Правильный ответ - настроить сервер так, чтоб апач убивался вне зависимости от скрипта, на уровне системы
Ага, я уже думал об этом. Так понимю, это надо кроном настроить периодическую проверку зависших процессов и убивать их.
Raistlin: time_limit в php.ini настроен на слишком большое значение. Скорее всего, вам уже не хватает процессорной мощности для обработки этого скрипта.
Для данного скрипта time_limit = 120, насчет перегрузки процессора неуверен - сейчас смотрю через top, там максимум 10-15 процентов показывает.
Raistlin: Вешается сам скрипт, а апач в это время ждет, когда же он выполнится.
А почему не срабатывает timeout в апаче? Или у него другая функция?
Пришел к выводу что зависшие процессы как-то связаны с этими ошибками:
[Sun Jul 25 19:10:04 2010] [error] [client 127.0.0.1] File does not exist: /var/www/'+data+' (такой адрес из-за ошибок в JavaScript). Заблокировал их через nginx, вроде апач пришел в норму.
LinuxMan: Сейчас какое значение стоит MaxClients? Попробуйте увеличить.
Нет, с этим все в порядке. Ставил 300 - сайт ложился через час с ошибкой превышение MaxClients. Ставил 3000 - сервер загинался из-за нехватки памяти через часов 8-10.
Сейчас вот что заметил - зависшие процессы по количеству совпадают с ошибкой File does not exist.
Получается, что из-за этого процессы зависают, и в последствии идет превышение MaxClients. Как сделать, чтобы эти процессы удалялись?
Кстати в других местах всё нормально? Сбои где-нибудь наблюдаются?
Нет, в остальном все в полном порядке. Подправил скрипт - все вернулось в норму. В день где-то около 300К запросов, ничего больше не зависает, хотя есть более сложные скрипты.
как много тех и других? В идеале увидеть бы всю картину.
Кстати W - Судя по всему - это живые
В основном все W, G - лишь парочку видел. Как много - ну в среднем 2-3 процесса в минуту зависали, когда ставил maxrequestperchild=1. Всего в день запросов к этому скрипту около 10К.
Вот, кстати, скрипт:
Логика такая: делаю запрос к imageshack.us, отправляю через GET url фотографии, которую этот сайт должен скачать с моего сайта (статика через nginx). Иногда с первого раза не получается, поэтому делаю через цикл, пока не получится верный ответ. По идее, это дело может зависнуть, но через 2 минуты PHP должен остановить скрипт, ну и апач - убить процесс. Когда убрал цикл - т.е. передача данных всего один раз, апач стал нормально работать.
Что говорит server-status ?
Что процесс находится в режиме "W" Sending Reply, иногда в "G" Gracefully finishing.
и как он там увидит, зависшие процессы ?
Ставил maxrequestperchild=1 и видел, что через час-два-три процесс все еще не был убит.
Правильный ответ - настроить сервер так, чтоб апач убивался вне зависимости от скрипта, на уровне системы
Ага, я уже думал об этом. Так понимю, это надо кроном настроить периодическую проверку зависших процессов и убивать их.
time_limit в php.ini настроен на слишком большое значение. Скорее всего, вам уже не хватает процессорной мощности для обработки этого скрипта.
Для данного скрипта time_limit = 120, насчет перегрузки процессора неуверен - сейчас смотрю через top, там максимум 10-15 процентов показывает.
Вешается сам скрипт, а апач в это время ждет, когда же он выполнится.
А почему не срабатывает timeout в апаче? Или у него другая функция?
список загружаемых модулей огласите, пожалуйста. И стату по трафику с файрволла снимите.
Intel® Core™ i7-920 Quad-Core 8 GB DDR3 RAM
Server version: Apache/2.2.9 (Debian)
Server built: Mar 28 2010 19:04:04
core
mod_log_config
mod_logio
prefork
http_core
mod_so
mod_alias
mod_auth_basic
mod_authn_file
mod_authz_default
mod_authz_groupfile
mod_authz_host
mod_authz_user
mod_autoindex
mod_cgi
mod_deflate
mod_dir
mod_env
mod_mime
mod_negotiation
mod_php5
mod_setenvif
mod_status
По трафику есть только такие данные (это за вчера):
Провалы это как раз когда количество процессов накапливались и вырубали сервер.
Вот еще инфа по php
PHP 5.2.6-1+lenny8 with Suhosin-Patch 0.9.6.2 (cli) (built: Mar 14 2010 09:07:33)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
with eAccelerator v0.9.5.2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
pashatlt добавил 26.07.2010 в 09:21
Вроде нашел скрипт, при котором подвисают процессы. Тогда возникает вопрос, каким образом может php скрипт вызвать зависание процесса apache?
Чета я не понял юмора... 😂
попробовал вернуть 300, все равно процессы не убиваются ...
Server-status показывает, что процессы зависают в статусе "W" Sending Reply
А шо таймаут говорит?
Если вы про конфиг апача, то там таймаут 30
Перед апачем nginx есть?
Ага, стоит.
Пришел к выводу что зависшие процессы как-то связаны с этими ошибками:
[Sun Jul 25 19:10:04 2010] [error] [client 127.0.0.1] File does not exist: /var/www/'+data+' (такой адрес из-за ошибок в JavaScript). Заблокировал их через nginx, вроде апач пришел в норму.
Сейчас какое значение стоит MaxClients? Попробуйте увеличить.
Нет, с этим все в порядке. Ставил 300 - сайт ложился через час с ошибкой превышение MaxClients. Ставил 3000 - сервер загинался из-за нехватки памяти через часов 8-10.
Сейчас вот что заметил - зависшие процессы по количеству совпадают с ошибкой File does not exist.
Получается, что из-за этого процессы зависают, и в последствии идет превышение MaxClients. Как сделать, чтобы эти процессы удалялись?
это я типо прикололся что ли? представленная мною ссылка работает до сих пор...
я просто подумал, что имеется ввиду, что гугл закрыл платежные страницы у себя тоже.
в данную минуту, кстати, ассист работает.
в аккаунте адвордса отключены платежные страницы:
Источник...
вот и всё... :(
да вроде на месте все
Подскажите плиз урл страницы оплаты через вебмани - по кнопке платежи перекидывает на дохлую https://varan.assist.ru/shops/cardpayment_google.cfm
пробуйте перезагружать страницу, иногда открывается.
по крайне мере я таким способом до обеда оплатил.
upd вот только что опять открылась