Php количество используемой памяти

Время выполнения скрипта PHP и потребляемая память

Функция microtime() с переданным значением true возвращает число секунд, прошедших с полуночи 01.01.1970, причём это значение подсчитано до сотых долей секунды. Затем идёт сам скрипт (исполняемый код), который мы и проверяем. В последней строке будет разница между текущим временем (после выполнения скрипта) и тем, что мы зафиксировали при старте скрипта. Разница времени после выполнения скрипта и времени до начала его работы, и есть время выполнения скрипта.

$start = microtime(true); // исполняемый код . echo '
==============================================================='; echo 'Время выполнения скрипта: ' . (microtime(true) - $start) . ' sec.';
Время выполнения скрипта: 0.16499996185303 sec.

Можно вместо $start = microtime(true) брать значение из переменной $_SERVER[‘REQUEST_TIME_FLOAT’], которая содержит время запроса к серверу. Вычисление времени выполнения происходит за исполняемым кодом.

// исполняемый код . $time = microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']; echo $time . ' sec.';

Если на сервере установлен Xdebag:

// исполняемый код . echo xdebug_time_index() . ' sec.';

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

Очень простой класс, который можно использовать для получения времени выполнения скрипта PHP. Имеет приватное статическое свойство $start, в которой будет храниться время начала выполнения скрипта и имеющее значение по умолчанию $start = .0. Метод start() присваивает значение, которое вернула функция microtime свойству $start. Метод finish() возвращает разницу между текущим временем (после выполнения скрипта) и тем, что мы зафиксировали при старте скрипта (присвоили значение в $start).

class Timer < /** * @var float время начала выполнения скрипта */ private static $start = .0; /** * Начало выполнения */ public static function start() < self::$start = microtime(true); >/** * Разница между текущей меткой времени и меткой self::$start * @return float */ public static function finish() < return microtime(true) - self::$start; >>

Пример использования класса Timer(). Заполним массив миллионом случайных чисел:

Timer::start(); for ($i = 0; $i < 1000000; $i++) < $array[] = rand(0, 1000000); >echo 'Время выполнения скрипта: ' . Timer::finish() . ' sec.';

Объем использованной памяти

Читайте также:  Sql injection with php

Функция memory_get_usage() возвращает количество памяти в байтах, которое было выделено PHP скрипту на данный момент. Принцип очень похож на измерение времени выполнения скрипта. Здесь тоже есть, как бы, стартовое состояние и и разница между текущим состоянием и стартовым.

$memory = memory_get_usage(); // исполняемый код . echo 'Скушано памяти: ' . (memory_get_usage() - $memory) . ' байт';

В Xdebug есть функция xdebug_memory_usage(), которая возвращает тот же результат:

// исполняемый код . echo 'Скушано памяти: ' . xdebug_memory_usage() . ' байт';

Конвертация результата в килобайты и мегабайты

$memory = memory_get_usage(); for ($i = 0; $i < 1000000; $i++) < $array[] = rand(0, 1000000); >$memory = memory_get_usage() - $memory; // Конвертация результата в килобайты и мегабайты $i = 0; while (floor($memory / 1024) > 0) < $i++; $memory /= 1024; >$name = array('байт', 'КБ', 'МБ'); echo 'Скушано памяти: ' . round($memory, 2) . ' ' . $name[$i];

Источник

Время и память выполнения скрипта PHP

Несколько методов как узнать время генерации страницы и затраченный объем памяти PHP скрипта.

Время выполнения скрипта

Вариант 1

$start = microtime(true); . $time = microtime(true) - $start; echo $time . ' сек.';

Результат

Вариант 2

Вместо $start = microtime(true) брать значение из переменной $_SERVER[‘REQUEST_TIME_FLOAT’] , которая содержит время запроса к серверу.

. $time = microtime(true) - $_SERVER['REQUEST_TIME_FLOAT']; echo $time . ' сек.';

Вариант 3

Если на сервере установлен Xdebag.

. echo xdebug_time_index() . ' сек.';

Среднее время

Т.к. результат «скачет» и зависит от многих факторов (нагрузка на хостинг и т.д.), доработаем скрипт, добавив запись результата в лог и подсчет среднего арифметического значения.

$start = microtime(true); . $time = round(microtime(true) - $start, 3); $f = fopen('time.log', 'a'); fwrite($f, $time . PHP_EOL); fclose($f); $log = file('time.log'); $result = round(array_sum($log) / count($log), 3); echo $result . ' сек.';

Затраченная память

Функция memory_get_usage() – возвращает количество памяти в байтах, которое было выделено PHP-скрипту на данный момент.

В Xdebug есть функция xdebug_memory_usage() , которая возвращает тот же результат.

$memory = memory_get_usage(); . echo (memory_get_usage() - $memory) . ' байт';

Результат

Конвертация результата в килобайты и мегабайты

$memory = memory_get_usage(); . $memory = memory_get_usage() - $memory; $i = 0; while (floor($memory / 1024) > 0) < $i++; $memory /= 1024; >$name = array('байт', 'КБ', 'МБ'); echo round($memory, 2) . ' ' . $name[$i];

Результат

Время и память скрипта

Объединим приведенные методы в один скрипт.

$start = microtime(true); $memory = memory_get_usage(); . $memory = memory_get_usage() - $memory; $time = microtime(true) - $start; // Подсчет среднего времени. $f = fopen('time.log', 'a'); fwrite($f, $time . PHP_EOL); fclose($f); $log = file('time.log'); $time = round(array_sum($log) / count($log), 3); // Перевод в КБ, МБ. $i = 0; while (floor($memory / 1024) > 0) < $i++; $memory /= 1024; >$name = array('байт', 'КБ', 'МБ'); $memory = round($memory, 2) . ' ' . $name[$i]; echo $time . ' сек. / ' . $memory;

Источник

memory_get_peak_usage

Возвращает максимальный объем памяти в байтах, который был выделен PHP-скрипту.

Список параметров

Передача true в качестве этого аргумента позволяет получить реальный объем памяти, выделенный системой. Если аргумент не задан или равен false , возвращаются сведения только о памяти, выделенной функцией emalloc() .

Возвращаемые значения

Возвращает максимальный объем памяти в байтах.

Смотрите также

  • memory_get_usage() — Возвращает количество памяти, выделенное для PHP
  • memory_reset_peak_usage() — Сбрасывает пиковое использование памяти
  • memory_limit

User Contributed Notes 1 note

memory_get_peak_usage() is used to retrieve the highest memory usage of PHP (or your running script) only. If you need the overall memory usage of the entire system, following function might be helpful. If retrieves the memory usage either in percent (without the percent sign) or in bytes by returning an array with free and overall memory of your system. Tested with Windows (7) and Linux (on an Raspberry Pi 2):

// Returns used memory (either in percent (without percent sign) or free and overall in bytes)
function getServerMemoryUsage ( $getPercentage = true )
$memoryTotal = null ;
$memoryFree = null ;

if ( stristr ( PHP_OS , «win» )) // Get total physical memory (this is in bytes)
$cmd = «wmic ComputerSystem get TotalPhysicalMemory» ;
@ exec ( $cmd , $outputTotalPhysicalMemory );

// Get free physical memory (this is in kibibytes!)
$cmd = «wmic OS get FreePhysicalMemory» ;
@ exec ( $cmd , $outputFreePhysicalMemory );

// Find free value
foreach ( $outputFreePhysicalMemory as $line ) if ( $line && preg_match ( «/^9+\$/» , $line )) $memoryFree = $line ;
$memoryFree *= 1024 ; // convert from kibibytes to bytes
break;
>
>
>
>
else
if ( is_readable ( «/proc/meminfo» ))
$stats = @ file_get_contents ( «/proc/meminfo» );

if ( $stats !== false ) // Separate lines
$stats = str_replace (array( «\r\n» , «\n\r» , «\r» ), «\n» , $stats );
$stats = explode ( «\n» , $stats );

// Separate values and find correct lines for total and free mem
foreach ( $stats as $statLine ) $statLineData = explode ( «:» , trim ( $statLine ));

//
// Extract size (TODO: It seems that (at least) the two values for total and free memory have the unit «kB» always. Is this correct?
//

// Total memory
if ( count ( $statLineData ) == 2 && trim ( $statLineData [ 0 ]) == «MemTotal» ) $memoryTotal = trim ( $statLineData [ 1 ]);
$memoryTotal = explode ( » » , $memoryTotal );
$memoryTotal = $memoryTotal [ 0 ];
$memoryTotal *= 1024 ; // convert from kibibytes to bytes
>

// Free memory
if ( count ( $statLineData ) == 2 && trim ( $statLineData [ 0 ]) == «MemFree» ) $memoryFree = trim ( $statLineData [ 1 ]);
$memoryFree = explode ( » » , $memoryFree );
$memoryFree = $memoryFree [ 0 ];
$memoryFree *= 1024 ; // convert from kibibytes to bytes
>
>
>
>
>

if ( is_null ( $memoryTotal ) || is_null ( $memoryFree )) return null ;
> else if ( $getPercentage ) return ( 100 — ( $memoryFree * 100 / $memoryTotal ));
> else return array(
«total» => $memoryTotal ,
«free» => $memoryFree ,
);
>
>
>

function getNiceFileSize ( $bytes , $binaryPrefix = true ) if ( $binaryPrefix ) $unit =array( ‘B’ , ‘KiB’ , ‘MiB’ , ‘GiB’ , ‘TiB’ , ‘PiB’ );
if ( $bytes == 0 ) return ‘0 ‘ . $unit [ 0 ];
return @ round ( $bytes / pow ( 1024 ,( $i = floor ( log ( $bytes , 1024 )))), 2 ) . ‘ ‘ . (isset( $unit [ $i ]) ? $unit [ $i ] : ‘B’ );
> else $unit =array( ‘B’ , ‘KB’ , ‘MB’ , ‘GB’ , ‘TB’ , ‘PB’ );
if ( $bytes == 0 ) return ‘0 ‘ . $unit [ 0 ];
return @ round ( $bytes / pow ( 1000 ,( $i = floor ( log ( $bytes , 1000 )))), 2 ) . ‘ ‘ . (isset( $unit [ $i ]) ? $unit [ $i ] : ‘B’ );
>
>

// Memory usage: 4.55 GiB / 23.91 GiB (19.013557664178%)
$memUsage = getServerMemoryUsage ( false );
echo sprintf ( «Memory usage: %s / %s (%s%%)» ,
getNiceFileSize ( $memUsage [ «total» ] — $memUsage [ «free» ]),
getNiceFileSize ( $memUsage [ «total» ]),
getServerMemoryUsage ( true )
);

?>

The function getNiceFileSize() is not required. Just used to shorten size in bytes.

Note: If you need the server load (CPU usage), I wrote a nice function to get that too: http://php.net/manual/en/function.sys-getloadavg.php#118673

  • Опции PHP/информационные функции
    • assert_​options
    • assert
    • cli_​get_​process_​title
    • cli_​set_​process_​title
    • dl
    • extension_​loaded
    • gc_​collect_​cycles
    • gc_​disable
    • gc_​enable
    • gc_​enabled
    • gc_​mem_​caches
    • gc_​status
    • get_​cfg_​var
    • get_​current_​user
    • get_​defined_​constants
    • get_​extension_​funcs
    • get_​include_​path
    • get_​included_​files
    • get_​loaded_​extensions
    • get_​required_​files
    • get_​resources
    • getenv
    • getlastmod
    • getmygid
    • getmyinode
    • getmypid
    • getmyuid
    • getopt
    • getrusage
    • ini_​alter
    • ini_​get_​all
    • ini_​get
    • ini_​parse_​quantity
    • ini_​restore
    • ini_​set
    • memory_​get_​peak_​usage
    • memory_​get_​usage
    • memory_​reset_​peak_​usage
    • php_​ini_​loaded_​file
    • php_​ini_​scanned_​files
    • php_​sapi_​name
    • php_​uname
    • phpcredits
    • phpinfo
    • phpversion
    • putenv
    • set_​include_​path
    • set_​time_​limit
    • sys_​get_​temp_​dir
    • version_​compare
    • zend_​thread_​id
    • zend_​version
    • get_​magic_​quotes_​gpc
    • get_​magic_​quotes_​runtime
    • restore_​include_​path

    Источник

Оцените статью