memory_get_peak_usage

(PHP 5 >= 5.2.0, PHP 7)

memory_get_peak_usage Возвращает пиковое значение объема памяти, выделенной PHP

Описание

int memory_get_peak_usage ([ bool $real_usage = false ] )

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

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

real_usage

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

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

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

Список изменений

Версия Описание
5.2.1 Для работы функции больше не требуется, чтобы PHP компилировался с настройкой --enable-memory-limit.
5.2.0 Добавлен аргумент real_usage.

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

Коментарии

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):

<?php

   
// 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);

            if (
$outputTotalPhysicalMemory && $outputFreePhysicalMemory) {
               
// Find total value
               
foreach ($outputTotalPhysicalMemory as $line) {
                    if (
$line && preg_match("/^[0-9]+\$/"$line)) {
                       
$memoryTotal $line;
                        break;
                    }
                }

               
// Find free value
               
foreach ($outputFreePhysicalMemory as $line) {
                    if (
$line && preg_match("/^[0-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) == && 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) == && 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: function.sys-getloadavg#118673
2017-02-18 17:14:07
http://php5.kiev.ua/manual/ru/function.memory-get-peak-usage.html

    Поддержать сайт на родительском проекте КГБ