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 function getServerMemoryUsage($getPercentage=true) { $memoryTotal = null; $memoryFree = null; if (stristr(PHP_OS, "win")) { $cmd = "wmic ComputerSystem get TotalPhysicalMemory"; @exec($cmd, $outputTotalPhysicalMemory); $cmd = "wmic OS get FreePhysicalMemory"; @exec($cmd, $outputFreePhysicalMemory); if ($outputTotalPhysicalMemory && $outputFreePhysicalMemory) { foreach ($outputTotalPhysicalMemory as $line) { if ($line && preg_match("/^[0-9]+\$/", $line)) { $memoryTotal = $line; break; } } foreach ($outputFreePhysicalMemory as $line) { if ($line && preg_match("/^[0-9]+\$/", $line)) { $memoryFree = $line; $memoryFree *= 1024; break; } } } } else { if (is_readable("/proc/meminfo")) { $stats = @file_get_contents("/proc/meminfo"); if ($stats !== false) { $stats = str_replace(array("\r\n", "\n\r", "\r"), "\n", $stats); $stats = explode("\n", $stats); foreach ($stats as $statLine) { $statLineData = explode(":", trim($statLine)); if (count($statLineData) == 2 && trim($statLineData[0]) == "MemTotal") { $memoryTotal = trim($statLineData[1]); $memoryTotal = explode(" ", $memoryTotal); $memoryTotal = $memoryTotal[0]; $memoryTotal *= 1024; } if (count($statLineData) == 2 && trim($statLineData[0]) == "MemFree") { $memoryFree = trim($statLineData[1]); $memoryFree = explode(" ", $memoryFree); $memoryFree = $memoryFree[0]; $memoryFree *= 1024; } } } } } 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'); } } $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