Реклама на сайте Advertise with us

Загадочное время выполнения скрипта

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 18.11.99
Сообщения: 14226

Ссылка на сообщениеДобавлено: 13/04/05 в 18:33       Ответить с цитатойцитата 

Есть PHP скрипт, выполняющий простейшую операцию (генерация примитивной страницы, без обращения к базе). Решили мы замерять скорость его выполнения: в конце страницы пишется время генерации. Нас удивило, что при незагруженном сервере, у некоторых пользователей, время генерации страницы отличается от нормы в сотни раз.

99.9% обращений обрабатывается за 0.1 секунды, а оставшиеся 0.01% за гораздо большее время (до 40 секунд).

Мы уже начали думать, что скрипт не считается выполненным, пока он не отдался из буфера на компьютер пользователю. А поскольку канал может быть очень медленным, формальное время выполнения может растягиваться?

Есть какие-то обьяснения этой загадке природы?

Web-сервер: Apache 1.3
Server LA: ~0.3

Последний раз редактировалось: kit (15/04/05 в 23:48), всего редактировалось 1 раз

Участник!
Покупаем CJ-tube и галлерный трафик + 100$ за регистрацию

0
 

www.awm-tools.com

С нами с 28.01.04
Сообщения: 2941
Рейтинг: 3056


Передовик Master-X (01.01.2006) Передовик Master-X (16.01.2006) Передовик Master-X (01.03.2006)
Ссылка на сообщениеДобавлено: 13/04/05 в 18:41       Ответить с цитатойцитата 

Сидит юзер на модеме 2400.
Зашел на страничку, скрипт стартанул и работает.
Пока пользователь потихоньку кушает из буфера результат работы скрипта, апач не разрешает php модулю завершить работу.
Это сугубо мое ИМХО.

Можно попробовать установить php как cgi и посмотреть, как в таком случае он будет себя вести.

PS: А каким способом вычисляешь время работы скрипта и как собираешь статистику? Может в этом причина?

PSS: МОжет быть еще такое - пользователь не дождался окончания выполнения скрипта и ушел со странички, а сессия апача подвисла вместе с php - вот тебе и 40 секунд. Какое там ограничение по времени на выполнение php скрипта стоит?

Засабмить свой вебмастерский ресурс, получи PR!

1
 

no sign

С нами с 25.07.03
Сообщения: 3623
Рейтинг: 1403

Ссылка на сообщениеДобавлено: 13/04/05 в 18:48       Ответить с цитатойцитата 

кит, а как ты статсу собираешь?

skype:megaarachno

0
 



С нами с 18.11.99
Сообщения: 14226

Ссылка на сообщениеДобавлено: 13/04/05 в 18:53       Ответить с цитатойцитата 

Способ сбора статистики:
В конце кода, пишется что-то типа
Код:
echo($current_time-$start_time);

Участник!
Покупаем CJ-tube и галлерный трафик + 100$ за регистрацию

0
 

www.awm-tools.com

С нами с 28.01.04
Сообщения: 2941
Рейтинг: 3056


Передовик Master-X (01.01.2006) Передовик Master-X (16.01.2006) Передовик Master-X (01.03.2006)
Ссылка на сообщениеДобавлено: 13/04/05 в 19:29       Ответить с цитатойцитата 

kit писал:
Способ сбора статистики:
В конце кода, пишется что-то типа
Код:
echo($current_time-$start_time);

А как ты это время выполнения в статистику собираешь? Куда все складываешь? Откуда узнал, что 99,99% - нормально, а 0,01% - долго? На глаз?

Засабмить свой вебмастерский ресурс, получи PR!

0
 

БешаныйСуслег

С нами с 16.06.04
Сообщения: 1322
Рейтинг: 1338

Ссылка на сообщениеДобавлено: 13/04/05 в 20:05       Ответить с цитатойцитата 

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

1
 



С нами с 18.11.99
Сообщения: 14226

Ссылка на сообщениеДобавлено: 13/04/05 в 21:53       Ответить с цитатойцитата 

То, что скрит должен отрабатывать очень быстро, мы уверены, так как он фактически ничего не делает, кроме как берёт файл с диска, и отдает его на выход.

Участник!
Покупаем CJ-tube и галлерный трафик + 100$ за регистрацию

0
 

www.awm-tools.com

С нами с 28.01.04
Сообщения: 2941
Рейтинг: 3056


Передовик Master-X (01.01.2006) Передовик Master-X (16.01.2006) Передовик Master-X (01.03.2006)
Ссылка на сообщениеДобавлено: 13/04/05 в 22:59       Ответить с цитатойцитата 


По своему опыту скажу, что вполне может быть из-за чтения файла с диска.

Засабмить свой вебмастерский ресурс, получи PR!

0
 



С нами с 18.11.99
Сообщения: 14226

Ссылка на сообщениеДобавлено: 13/04/05 в 23:10       Ответить с цитатойцитата 

Можешь подробно рассказать?

У нас raid0 на двух очень бысттрых SCSI дисках. Количество запросов не велико, где-то 3 запроса в секунду.

Участник!
Покупаем CJ-tube и галлерный трафик + 100$ за регистрацию

0
 



С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362

Ссылка на сообщениеДобавлено: 14/04/05 в 02:13       Ответить с цитатойцитата 

kit выложи кусок кода и все станет ясно , а то это гадание на кофейной гуще , если это возможно.

0
 

пенсионер

С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166

Ссылка на сообщениеДобавлено: 14/04/05 в 02:42       Ответить с цитатойцитата 

Kit, правильно мыслишь.
пока юзер не получил все данные - скрипт пашет.
по идее можно скорость увеличить воткнув все в одну единственную команду...
т.е. если у тебя там в цикле или просто несколько раз подряд идет
echo ...
echo ...
echo @@@
оставляешь только одну команду.
но я особо над этим не эксперементировал.

Здесь ищу и даю работу^так делаю деньги
тут читаю инфу^веду блог, а вы?

1
 



С нами с 24.02.05
Сообщения: 75
Рейтинг: 123

Ссылка на сообщениеДобавлено: 14/04/05 в 07:31       Ответить с цитатойцитата 

bog - по идее для того же проще ob_start в начале/ob_flush в конце

0
 



С нами с 15.04.04
Сообщения: 60
Рейтинг: 25

Ссылка на сообщениеДобавлено: 14/04/05 в 09:13       Ответить с цитатойцитата 

кусок скрипта выглядит примерно так:
Код:

$start=get_time(); // время старта скрипта
$dir=...;
$file=...;
$out=@file_get_contents("$dir/$file");
$out=str_replace('одна фигня','другая фигня',$out);
echo $out;
save_time($start); // запоминаем время выполнения скрипта
exit();

0
 

www.awm-tools.com

С нами с 28.01.04
Сообщения: 2941
Рейтинг: 3056


Передовик Master-X (01.01.2006) Передовик Master-X (16.01.2006) Передовик Master-X (01.03.2006)
Ссылка на сообщениеДобавлено: 14/04/05 в 09:34       Ответить с цитатойцитата 

RasWeller писал:
кусок скрипта выглядит примерно так:
Код:

$start=get_time(); // время старта скрипта
$dir=...;
$file=...;
$out=@file_get_contents("$dir/$file");
$out=str_replace('одна фигня','другая фигня',$out);
echo $out;
save_time($start); // запоминаем время выполнения скрипта
exit();


Это мое ИМХО:
1. Как говорили выше, пользователь сидит на медленной линии. Пока содержимое до конца не докачает, апач скрипт не отпустит.
2. Возможно дело в $out=@file_get_contents("$dir/$file"); Согласен, что на рейде все должно летать, но бывают все-таки исключения? Так вот эти 0,01% вполне попадают в исключения.
3. Как говорили выше, пользователь послал запрос серверу, затем у пользователя начинает глючить интернет секунд 20-30, а потом он забирает ответ.
4. Возможно проблема кроется в save_time($start). Куда сейвим-то? в БД или в файл?

Засабмить свой вебмастерский ресурс, получи PR!

1
 



С нами с 15.04.04
Сообщения: 60
Рейтинг: 25

Ссылка на сообщениеДобавлено: 14/04/05 в 09:35       Ответить с цитатойцитата 

В файл ессно. Нафига БД трогать ради такой мелочи icon_smile.gif

0
 

www.awm-tools.com

С нами с 28.01.04
Сообщения: 2941
Рейтинг: 3056


Передовик Master-X (01.01.2006) Передовик Master-X (16.01.2006) Передовик Master-X (01.03.2006)
Ссылка на сообщениеДобавлено: 14/04/05 в 09:36       Ответить с цитатойцитата 

kit писал:
Можешь подробно рассказать?
У нас raid0 на двух очень бысттрых SCSI дисках. Количество запросов не велико, где-то 3 запроса в секунду.

Ну 3 запроса в секунду - это усредненное значение. Бывают же пики загрузки и спады. Может быть в один из таких пиков было сразу штук 50 запросов, среди которых и был один нами обсуждаемый, поскольку остальные 49 занимались чтением.

Засабмить свой вебмастерский ресурс, получи PR!

0
 



С нами с 15.04.04
Сообщения: 60
Рейтинг: 25

Ссылка на сообщениеДобавлено: 14/04/05 в 09:45       Ответить с цитатойцитата 

A d u l t писал:
Ну 3 запроса в секунду - это усредненное значение. Бывают же пики загрузки и спады. Может быть в один из таких пиков было сразу штук 50 запросов, среди которых и был один нами обсуждаемый, поскольку остальные 49 занимались чтением.

Это не объясняет почему время отдачи некоторых файлов поднимается со средних 0.3 сек до .... 232 сек!!! Что он делает 4 минуты????

0
 

www.awm-tools.com

С нами с 28.01.04
Сообщения: 2941
Рейтинг: 3056


Передовик Master-X (01.01.2006) Передовик Master-X (16.01.2006) Передовик Master-X (01.03.2006)
Ссылка на сообщениеДобавлено: 14/04/05 в 10:01       Ответить с цитатойцитата 

RasWeller писал:
Это не объясняет почему время отдачи некоторых файлов поднимается со средних 0.3 сек до .... 232 сек!!! Что он делает 4 минуты????

Значит причина в другом.

Засабмить свой вебмастерский ресурс, получи PR!

0
 

пенсионер

С нами с 07.11.02
Сообщения: 2612
Рейтинг: 1166

Ссылка на сообщениеДобавлено: 14/04/05 в 11:45       Ответить с цитатойцитата 

так летать должно icon_smile.gif
$start=get_time(); // время старта скрипта
$dir=...;
$file=...;
$out=@file_get_contents("$dir/$file");
$out=str_replace('одна фигня','другая фигня',$out);
save_time($start); // запоминаем время выполнения скрипта
echo $out;

Здесь ищу и даю работу^так делаю деньги
тут читаю инфу^веду блог, а вы?

1
 



С нами с 15.04.04
Сообщения: 60
Рейтинг: 25

Ссылка на сообщениеДобавлено: 14/04/05 в 12:02       Ответить с цитатойцитата 

Угу, а так:

$start=get_time(); // время старта скрипта
save_time($start); // запоминаем время выполнения скрипта
$dir=...;
$file=...;
$out=@file_get_contents("$dir/$file");
$out=str_replace('одна фигня','другая фигня',$out);
echo $out;

ваще не скрипт, а аццкий сотона! icon_smile.gif

0
 

no sign

С нами с 25.07.03
Сообщения: 3623
Рейтинг: 1403

Ссылка на сообщениеДобавлено: 14/04/05 в 14:00       Ответить с цитатойцитата 

A d u l t писал:
1. Как говорили выше, пользователь сидит на медленной линии. Пока содержимое до конца не докачает, апач скрипт не отпустит.


нифига. вот точно не соглашусь. сначала процессится PHP - потом это все отдается юзеру.

skype:megaarachno

0
 



С нами с 24.02.05
Сообщения: 75
Рейтинг: 123

Ссылка на сообщениеДобавлено: 14/04/05 в 16:22       Ответить с цитатойцитата 

arachnO - нет, смотри работу PHP с буфером вывода

Чтобы исключить влияние доступа на чтение к диску можно временно загнать файл в виртуальный диск в памяти. Если тормоза останутся - дело таки в HTTP соединении. До кучи можно сохранять в логи загрузку сервера (CPU(s)/MEM) в моменты когда время выполнения выше N.

ps

$start=get_time(); // время старта скрипта
save_time($start); // запоминаем время выполнения скрипта
$dir=...;
$file=...;
$out=@file_get_contents("$dir/$file");
$out=str_replace('одна фигня','другая фигня',$out);
$mid=get_time();
save_time($mid); //время самого процессинга
print($out);
$end=get_time();
save_time($end); //время окончания вывода

pps каково значение параметров set_time_limit и ignore_user_abort?

1
 



С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362

Ссылка на сообщениеДобавлено: 14/04/05 в 18:10       Ответить с цитатойцитата 

file_get_contents ?

0
 

Гражданин планеты Земля

С нами с 30.03.03
Сообщения: 7217
Рейтинг: 2185

Ссылка на сообщениеДобавлено: 14/04/05 в 19:04       Ответить с цитатойцитата 

mr.GOD писал:
file_get_contents ?

и в чем суть вопроса?

Гыыы

0
 



С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362

Ссылка на сообщениеДобавлено: 14/04/05 в 20:45       Ответить с цитатойцитата 

wMaster писал:
и в чем суть вопроса?


в этом и вопрос , нужно ли и есть ли оно там ...

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »