pashatlt

Рейтинг
101
Регистрация
16.07.2009
Bazis007:

Кстати в других местах всё нормально? Сбои где-нибудь наблюдаются?

Нет, в остальном все в полном порядке. Подправил скрипт - все вернулось в норму. В день где-то около 300К запросов, ничего больше не зависает, хотя есть более сложные скрипты.

Bazis007:

как много тех и других? В идеале увидеть бы всю картину.
Кстати W - Судя по всему - это живые

В основном все 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 должен остановить скрипт, ну и апач - убить процесс. Когда убрал цикл - т.е. передача данных всего один раз, апач стал нормально работать.

Bazis007:
Что говорит server-status ?

Что процесс находится в режиме "W" Sending Reply, иногда в "G" Gracefully finishing.

madoff:
и как он там увидит, зависшие процессы ?

Ставил maxrequestperchild=1 и видел, что через час-два-три процесс все еще не был убит.

Andreyka:
Правильный ответ - настроить сервер так, чтоб апач убивался вне зависимости от скрипта, на уровне системы

Ага, я уже думал об этом. Так понимю, это надо кроном настроить периодическую проверку зависших процессов и убивать их.

Raistlin:
time_limit в php.ini настроен на слишком большое значение. Скорее всего, вам уже не хватает процессорной мощности для обработки этого скрипта.

Для данного скрипта time_limit = 120, насчет перегрузки процессора неуверен - сейчас смотрю через top, там максимум 10-15 процентов показывает.

Raistlin:
Вешается сам скрипт, а апач в это время ждет, когда же он выполнится.

А почему не срабатывает timeout в апаче? Или у него другая функция?

Raistlin:
список загружаемых модулей огласите, пожалуйста. И стату по трафику с файрволла снимите.

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?

tester999:
Чета я не понял юмора... 😂

попробовал вернуть 300, все равно процессы не убиваются ...

Server-status показывает, что процессы зависают в статусе "W" Sending Reply

tester999:
А шо таймаут говорит?

Если вы про конфиг апача, то там таймаут 30

Andreyka:
Перед апачем nginx есть?

Ага, стоит.

Пришел к выводу что зависшие процессы как-то связаны с этими ошибками:

[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. Как сделать, чтобы эти процессы удалялись?

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

я просто подумал, что имеется ввиду, что гугл закрыл платежные страницы у себя тоже.

в данную минуту, кстати, ассист работает.

angr:
в аккаунте адвордса отключены платежные страницы:
Источник...
вот и всё... :(

да вроде на месте все

Jedi:
Подскажите плиз урл страницы оплаты через вебмани - по кнопке платежи перекидывает на дохлую https://varan.assist.ru/shops/cardpayment_google.cfm

пробуйте перезагружать страницу, иногда открывается.

по крайне мере я таким способом до обеда оплатил.

upd вот только что опять открылась

Всего: 204