Нет, в остальном все в полном порядке. Подправил скрипт - все вернулось в норму. В день где-то около 300К запросов, ничего больше не зависает, хотя есть более сложные скрипты.
В основном все W, G - лишь парочку видел. Как много - ну в среднем 2-3 процесса в минуту зависали, когда ставил maxrequestperchild=1. Всего в день запросов к этому скрипту около 10К.
Вот, кстати, скрипт:
set_time_limit(120); do { $xml = file_get_contents("http://www.imageshack.us/upload_api.php?url=*****************"); $data = $xml2assoc($xml); } while($data['imginfo']['links']['image_link']==''); echo $data['imginfo']['links']['image_link']; exit;
Логика такая: делаю запрос к imageshack.us, отправляю через GET url фотографии, которую этот сайт должен скачать с моего сайта (статика через nginx). Иногда с первого раза не получается, поэтому делаю через цикл, пока не получится верный ответ. По идее, это дело может зависнуть, но через 2 минуты PHP должен остановить скрипт, ну и апач - убить процесс. Когда убрал цикл - т.е. передача данных всего один раз, апач стал нормально работать.
Что процесс находится в режиме "W" Sending Reply, иногда в "G" Gracefully finishing.
Ставил maxrequestperchild=1 и видел, что через час-два-три процесс все еще не был убит.
Ага, я уже думал об этом. Так понимю, это надо кроном настроить периодическую проверку зависших процессов и убивать их.
Для данного скрипта 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
Ага, стоит.
Пришел к выводу что зависшие процессы как-то связаны с этими ошибками:
[Sun Jul 25 19:10:04 2010] [error] [client 127.0.0.1] File does not exist: /var/www/'+data+' (такой адрес из-за ошибок в JavaScript). Заблокировал их через nginx, вроде апач пришел в норму.
Нет, с этим все в порядке. Ставил 300 - сайт ложился через час с ошибкой превышение MaxClients. Ставил 3000 - сервер загинался из-за нехватки памяти через часов 8-10.
Сейчас вот что заметил - зависшие процессы по количеству совпадают с ошибкой File does not exist.
Получается, что из-за этого процессы зависают, и в последствии идет превышение MaxClients. Как сделать, чтобы эти процессы удалялись?
я просто подумал, что имеется ввиду, что гугл закрыл платежные страницы у себя тоже.
в данную минуту, кстати, ассист работает.
да вроде на месте все
пробуйте перезагружать страницу, иногда открывается.
по крайне мере я таким способом до обеда оплатил.
upd вот только что опять открылась