Как я могу узнать, какие PHP-скрипты дольше всего загружаются в Apache?
6 ответов
Есть несколько способов сделать это.
1: Включить mod_status на вашем веб-сервере. Это позволяет получить общее представление о том, как сервер apache ведет себя в целом, перейдя в /server-status /. Не забудьте ограничить доступ к этому местоположению:
ExtendedStatus on
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from 192.168.0.0/24
</Location>
2. Измените директиву LogFormat, чтобы добавить время обработки. Затем вы можете связать URI со временем ответа:
LogFormat "%h %t \"%r\" %b sec:%T usec:%D"
Это будет отображать удаленный IP-адрес, дату и время запроса, запрос, отправленные байты, секунды и микросекунды.
3: Для размера памяти скрипта и коэффициента попадания скрипта административная консоль, поставляемая с Xcache , очень хороша. Скрипты с большими иерархиями классов могут расширяться до многих мегабайт в памяти.
4: Профилирование ваших php-скриптов может помочь. Если вы хотите сосредоточиться на профилировании одного скрипта, Xdebug наверняка поможет. Пользователь Damien предлагает способ. Я бы предложил регистрировать использование вашей памяти, а также использовать microtime, но установить порог для входа в систему, например:
$THRESH = 2;
$profile = array();
$profile['start'] = microtime( true );
// stuff
$profile['end'] = microtime( true );
$profile['delta'] = $profile['end'] - $profile['start'];
if( $profile['delta'] >= $THRESH )
error_log( __FILE__.": ".$profile['delta']." seconds " );
Регулировка порога делает ваши журналы намного чище.
Y Slow - это один из способов узнать скорость загрузки страницы.
Я использую эту команду, чтобы определить, что занимает слишком много времени, чтобы ответить:
$ w3m http://localhost/server-status | tee | grep "GET\|HEAD\|POST" | awk '{if ($6>15) print}'
В зависимости от ваших сценариев, вы можете использовать функцию microtime:
$stime = microtime();
$stime = explode(" ",$stime);
$stime = $stime[1] + $stime[0];
//Some Code...
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$totaltime = ($mtime - $stime);
echo $totaltime;
Поставьте столько разрывов, сколько вам нужно, чтобы найти неисправную часть кода.
(Но, возможно, это должен был быть так ответ ...)
Запустите их с помощью Apache JMeter.
Apache JMeter может использоваться для тестирования производительности как на статических, так и на динамических ресурсах (файлы, сервлеты, сценарии Perl, объекты Java, базы данных и запросы, серверы FTP и т.д.). Его можно использовать для имитации большой нагрузки на сервер, сеть или объект, чтобы проверить ее прочность или проанализировать общую производительность при различных типах нагрузки. Вы можете использовать его для графического анализа производительности или для проверки поведения вашего сервера / скрипта / объекта в условиях высокой параллельной нагрузки.
Запустите журналы вашего сервера через инструмент отчетов. Приличный должен быть в состоянии сказать вам, сколько времени в среднем занимает загрузка каждой страницы. Он также должен показывать минимальное и максимальное время загрузки для каждой страницы и много другой статистики.