include, readfile и тд - периодические тормоза

fly2k

Новичок
include, readfile и тд - периодические тормоза

Добер день!

Есть специфический скрипт, обрабатывающий "вход" на сайт. То есть скрипт "безшумный" - делает все что ему надо(пишет статсы) и выводит "морду" сайта...

"морда" - статический html-файл... и есть проблемы с выводом - периодически это дело занимает очень много времени - часто по 10-30 секунды, а иногда и по 2-3 минуты...

Пробовал include, readfile и while(!feof($f)) echo fread($f, 10024); - одна фигня...

Тесты показали что проблема не в чтении(это махом), а именно в выводе... пример:
Код:
$ttt=microtime();
$f=file($filename);
$readtime=getmicrotime()-getmicrotime($ttt);

$ttt=microtime();
reset($f);
while(list($key, $val)=each($f))
    print($val);
$writetime=getmicrotime()-getmicrotime($ttt);
$readtime - стремится к нулю, а $writetime - может быть, как я уже говорил, довольно большим...

Нагрузка довольно большая - больше 1K хитов в час, при этом косяки такие не всегда, время >5sec примерно на 1/3 всех хитов...

Где тут собака порылась? Что посоветуете?

Спасибо.
 

Screjet

Новичок
Кэширование вывода включено?
Выделенный сервак / хостинг?
 

fly2k

Новичок
Автор оригинала: Screjet
Кэширование вывода включено?
Выделенный сервак / хостинг?
сервак - выделенный, буржуйский, дорогой :)
кеширование(ob*) не используется - думаешь стоит попробовать?
 

fly2k

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

fly2k

Новичок
Автор оригинала: Фанат
это ты что имеешь в виду?
Ну то есть я НЕ юзаю функции ob*
Хотя это скорее не кеширование вывода, а его буферизация, просто я не знаю что еще Screjet мог подразумевать под "кешированием вывода"
 

Фанат

oncle terrible
Команда форума
тогда так и надо говорить - я НЕ юзаю функции ob*
а кэширование у тебя включено

-~{}~ 18.10.05 00:25:

кэширование - это output_buffering в php.ini
 

fly2k

Новичок
Автор оригинала: Фанат
тогда так и надо говорить - я НЕ юзаю функции ob*
а кэширование у тебя включено
Новость для меня :о
Таким образом получается из-за того что у меня кеширование _включено_?
Что сделать чтобы его _выключить_? Заюзать ob* ?

Только я совсем запутался - что значит кеширование, и как оно связано с буферизацией, если по умолчанию(без использования ob*) считается что кеширование включено...

Можете в ссылку мордой ткнуть(вроде не первый год "за мужем" но что то нигде не встречал ничего именно по кешированию в ПХП) - просвятите в общем...
 

Screjet

Новичок
php.ini =>

output_buffering -> побольше
implicit_flush = Off (по дефолту)

И еще проверь загрузку системы и сети. Возможно банально сервер перегружен.
 

fly2k

Новичок
Автор оригинала: Screjet
php.ini =>

output_buffering -> побольше
implicit_flush = Off (по дефолту)
то есть, включить кеш побольше?
как же тогда понимать фразу Фаната:
кэширование наоборот - тормоза и делает тебе
???

И еще проверь загрузку системы и сети. Возможно банально сервер перегружен.
сервер конечно довольно хорошо загружен, но все дургие скрипты, которые не выдают ничего кроме хедера с редиректом(Location: blablabla) - выполняются на ура без каких либо тормозов.. проверено по mod_status.

Самое обидное как раз в том, что скрипт не совсем тривиальный и в нем есть несколько обращений к мускулу, но это все занимает 0секунд, а банальный вывод статики - тормозит :(
 

Фанат

oncle terrible
Команда форума
так и понимай.
каждый из ответивших имеет своё мнение.
кто-то из двоих неправ.

когда кэширование (буферинг) выключено, данные улетают в апач и скрипт благополучно завершается.
и $readtime стремится к $writetime
а с включённым скрипт висит, пока клиент не отвалится
 

fly2k

Новичок
Что то вы меня совсем запутали :)

вопросы:

0) output_buffering > 0 в php.ini равносильно тому же что и ob_start / ob_end_flush, даже если их нет? Или я что то путаю?
1) output_buffering > 0 - это кеширование включено или выключено? :) Просто ваши ответы настолько расходятся с моим, казалось бы стабильно устоявшемся, представлени о кешировании :)

ЗЫ. Попробовал только что "обернуть" вывод в ob_start/ob_end_flush - не помогло :(
 

fly2k

Новичок
в любом случае, первоначальный вопрос остается открытым :(
 

Фанат

oncle terrible
Команда форума
выключи буфферинг

-~{}~ 18.10.05 01:02:

реальная загрузка упадёт врядли, но $writetime придёт в норму
 

fly2k

Новичок
Автор оригинала: Фанат
выключи буфферинг
Он у меня выключен. То есть output_buffering=0 (по данным phpinfo())

Я что то не понимаю тебя совсем. Если ты подразумевал что output_buffering у меня был включен, то что же тогда должна была доказать "обертка" вывода в ob_start/ob_end_flush ? Это же одно и то же(http://php.rinet.ru/manual/ru/ref.outcontrol.php)
То есть если у меня был бы output_buffering>0, то буферинг включен всегда, вне зависимости от того используются ob_start или нет...
Чем же доказана твоя правота, и в чем она заключается?
Я ни в коем случае не хочу доказать что ты не прав :) Я всего лишь хочу решить свою траблу... а для этого желательно понять ход твоих мыслей, твою логику... Пока мне это сложно дается.

реальная загрузка упадёт врядли, но $writetime придёт в норму
Меня это устроило бы на 100% :)
Так как загрузки камня в случае тормозов не наблюдается. То есть по данным mod_status'а, тормозные запросы просто занимают много времени на выполнение, а загрузка камня при этом не больше чем у тех запросов, которые по времени занимают 0секунд... То есть в данном случае для меня это не вопрос оптимизации(загрузки нет), а вопрос правильного функционирования - не гоже клиенту ждать по минуте-две загрузки странице... даже если речь идет о 3-10% клиентов...


2ALL: Неужели больше некому ничего добавить по теме? Я так понял что output_buffering вроде как не при чем(по крайней мере в моем случае), поэтому может будут какие другие догадки?
 

Фанат

oncle terrible
Команда форума
Если ты подразумевал что output_buffering у меня был включен, то что же тогда должна была доказать "обертка" вывода в ob_start/ob_end_flush
про обёртку вопрос не ко мне.

может будут какие другие догадки?
выдай полную информацию - ОС, софт, версии, подключение.
 

fly2k

Новичок
Автор оригинала: Фанат
выдай полную информацию - ОС, софт, версии, подключение.
FC3
http://69.31.92.236/phpinfo.php

Кстати, видимо ты как раз не прав :)
Пробовал включать output_buffering(поставил просто On), и вот $writetime пришел в норму...
Но при этом по mod_status'у время выполнения этих запросов не уменьшилось :(

То есть все как ты говорил, только с точностью до наоборот: когда буферинг _включен_, данные улетают в апач и скрипт завершается, а скрипт завершает работу без малешей заботы о том, что с этими данными дальше будет...

Только вот какой момент меня в ступор ввел: почему же этого эффекта не наблюдалось, когда я обертывал вывод в ob_start/ob_end_flush?
Может быть потому что я ob_end_flush ставил _перед_ тем как посчитать время? Если так, то справедливо будет предположить, что и при включенном output_buffering>0 скрипт не отваливается, а точно так же по завершении делает "флаш"... и тормоза просто банально переносятся с мест вывода на место "флаша"...

Теперь вот задумался - может это естественные тормоза? То есть от клиента заисящие? Как это можно проверить?
 
Сверху