memory_get_usage
当您认为进程处于高峰时,您可以使用(http://php.net/manual/en/function.memory-get-usage.php)。
或者你也可以偶尔调用它并记录任何最高值......或者你喜欢。
但这是在一个过程中。您是在谈论一个 PHP 进程“A”检查另一个 PHP 进程的内存使用情况吗?
如果是这样的话:
$myPID = getmypid();
$stats = explode("\n", shell_exec('pmap $(pgrep php) | grep \'total\\|\\:\''));
for ($i = 0; $i < count($stats); $i += 2) {
if (strpos($stats[$i], "$myPID") === false) {
preg_match('/\d+/', $stats[$i+1], $preRes);
$res = $preRes[0];
}
}
//if $res has a value, that value is the kilobytes of memory being used by the other PHP process
这个解决方案有一个问题:如果你总共运行了 2 个以上的 php 进程,你不能保证你会得到正确的进程。
为了解决这个问题,首先运行另一个进程,获取它的 PID,然后将它作为参数传递给这个进程。如果您有要检查的进程 PID,您可以这样做:
$stats = explode("\n", shell_exec('pmap $(pgrep php) | grep \'total\\|\\:\''));
for ($i = 0; $i < count($stats); $i += 2) {
if (strpos($stats[$i], "$otherPID") === 0) {
preg_match('/\d+/', $stats[$i+1], $preRes);
$res = $preRes[0];
}
}
//$res contains the result you want in kilobytes
您也可以检查所有不是您的进程的内存:
$myPID = getmypid();
$stats = explode("\n", shell_exec('pmap $(pgrep php) | grep \'total\\|\\:\''));
for ($i = 0; $i < count($stats) - 1; $i += 2) {
if (strpos($stats[$i], "$myPID") === false) {
preg_match('/\d+/', $stats[$i+1], $preRes);
$res[] = $preRes[0];
}
}
因此,要获得最大的内存使用量,只需保留一个 $max 变量并继续检查它。