URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 4943
[ Назад ]

Исходное сообщение
"Тормозит PHP при выводе большого контента - ПОМОГИТЕ!"

Отправлено Сергей , 07-Май-07 23:05 
Есть непонятная проблема.

Если положить на сервер статический файл 1.html размером 100 кб, то при его прямом вызове апач отдает мгновенно. Если этот файл вызывать через php-обертку

<?
function getmicrotime()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

$time_start = getmicrotime();

$a=file('1.html');
$a=implode('',$a);
echo $a;

$time_end = getmicrotime(); $time_work = $time_end - $time_start; die ("$time_work seconds\n");

?>

То вывод ОЧЕНЬ тормозит и апач начинает отдавать контент только через 8-9 секунд. Чтение данных (оператор file) занимает миллисекунды, все остальное куда-то теряется на передаче контента через echo

В конфиге PHP
memory_limit = 76M
output_buffering = 4096
PHP 4.4.4 собран как модуль апачи

где грабли? куда копать???


Содержание

Сообщения в этом обсуждении
"Тормозит PHP при выводе большого контента - ПОМОГИТЕ!"
Отправлено spyfox , 07-Май-07 23:11 
попробуй поставить xdebug - поможет разобраться
Измерять время через microtime не совсем корректно

"Тормозит PHP при выводе большого контента - ПОМОГИТЕ!"
Отправлено Сергей , 08-Май-07 18:30 
>попробуй поставить xdebug - поможет разобраться
>Измерять время через microtime не совсем корректно

Спасибо за совет. Не знал что есть xdebug

Ок, сегодня поставил. Ясности не добавилось:
общее время self time 9 203ms
getmicrotime 0,1ms
php::file - 8,8ms
php::implode - 3,2 ms

основная задержка происходит при выводе оператора echo в поток STDOUT

Если же вызвать php через SSH, например "php 1.php > out", то работа производится мгновенно, задержки 0,01 сек.

Явно проблема во взаимодействии между модулем PHP и апачем. Такое ощущение что взаимодействие осуществляется через жесткий диск (swap) ?

Как можно определить где грабли?