| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Саян 09.02.2014 13:56
Привет. Исследуя странное расходы памяти Парсером в некоторых конфигурациях, я сделал вот такой скрипт (код ниже). Но прежде чем приступать к серьезным измерениям, обнаружил несколько неожиданное поведение статусных параметров. Точнее:@main[]
$timestart(^curtime[])
$u[^request:uri.split[?;lh]]$u[$u.0]
#загружает сам себя
$loadurl[http://$env:SERVER_NAME/$u?load_tester=1]
#или загружает главную страницу
#$loadurl[http://$env:SERVER_NAME/?load_tester=1]
$rm[^table::create{utime tv maxrss usedmem allmem}]
$wait(0)
$cnt(^form:cnt.int(0))
^if($cnt){
#больше 1000 итераций не дает существенного улучшения статистики
^if($cnt > 1000){$cnt(1000)}
^for[i](0;$cnt){
$rn(^math:random(9999))
^if($rn > 9900){^memory:compact[]}
$before(^curtime[])
$x[^file::load[text;$loadurl&rn=$rn][$.any-status(true)]]
^wait.inc(^curtime[] - $before)
^rm.append{^untaint{$x.text}}
}
$utime(0) $tv(0) $maxrss(0) $usedmem(0) $allmem(0)
^try{
^rm.menu{^utime.inc($rm.utime) ^tv.inc($rm.tv) ^maxrss.inc($rm.maxrss) ^usedmem.inc($rm.usedmem) ^allmem.inc($rm.allmem)}
}{^blad[]}
$rmc(^rm.count[])
<p>Среднее время выполнения скрипта utime ^eval($utime / $rmc * 1000)[%.3f] ms
<p>Среднее время выполнения скрипта d(tv) ^eval($tv / $rmc * 1000)[%.3f] ms
<p>Среднее время ожидания отклика ^eval($wait * 1000 / $rmc)[%.3f] ms
<p>
<p>Средняя память процесса maxrss ^eval($maxrss / $rmc)[%.0f] kbytes
<p>Средняя память gc ^eval($usedmem / $rmc)[%.0f] kbytes
<p>Средняя полная память gc ^eval($allmem / $rmc)[%.0f] kbytes
}{
#эту строчку можно добавить в конец выполнения скрипта главной страницы на сайте
^if(def $form:load_tester){^for[i](1;999){$j(^math:random(9999))}^sleep(0)$response:body[$status:rusage.utime ^eval(^curtime[]-$timestart) $status:rusage.maxrss $status:memory.used $status:memory.ever_allocated_since_start]}
}
@curtime[]
$result($status:rusage.tv_sec - 1391900000 + $status:rusage.tv_usec / 1000000 )Благодарю за внимание.