有没有办法通过php(使用linux命令的widthout)知道服务器(Linux发行版)中的avaliable ram?
编辑:抱歉,目标是了解服务器/虚拟机中可用于特定服务器的ram(即使共享该内存).
rco*_*der 38
如果您知道此代码仅在Linux下运行,则可以使用特殊/proc/meminfo
文件来获取有关系统虚拟内存子系统的信息.该文件的格式如下:
MemTotal: 255908 kB
MemFree: 69936 kB
Buffers: 15812 kB
Cached: 115124 kB
SwapCached: 0 kB
Active: 92700 kB
Inactive: 63792 kB
...
Run Code Online (Sandbox Code Playgroud)
第一行MemTotal: ...
包含机器中物理RAM的数量,减去内核为自己使用的空间.这是我所知道的在Linux系统上获得可用内存的简单报告的最佳方式.您应该能够通过以下代码提取它:
<?php
$fh = fopen('/proc/meminfo','r');
$mem = 0;
while ($line = fgets($fh)) {
$pieces = array();
if (preg_match('/^MemTotal:\s+(\d+)\skB$/', $line, $pieces)) {
$mem = $pieces[1];
break;
}
}
fclose($fh);
echo "$mem kB RAM found"; ?>
Run Code Online (Sandbox Code Playgroud)
(请注意:此代码可能需要对您的环境进行一些调整.)
J.C*_*cio 37
使用/proc/meminfo
并将所有内容都放入数组中很简单:
<?php
function getSystemMemInfo()
{
$data = explode("\n", file_get_contents("/proc/meminfo"));
$meminfo = array();
foreach ($data as $line) {
list($key, $val) = explode(":", $line);
$meminfo[$key] = trim($val);
}
return $meminfo;
}
?>
Run Code Online (Sandbox Code Playgroud)
var_dump( getSystemMemInfo() );
array(43) {
["MemTotal"]=>
string(10) "2060700 kB"
["MemFree"]=>
string(9) "277344 kB"
["Buffers"]=>
string(8) "92200 kB"
["Cached"]=>
string(9) "650544 kB"
["SwapCached"]=>
string(8) "73592 kB"
["Active"]=>
string(9) "995988 kB"
...
Run Code Online (Sandbox Code Playgroud)
可以使用PHP中的exec函数运行Linux命令.这是有效的,并将完成工作(如果目标是获取内存).
请尝试以下代码:
<?php
exec("free -mtl", $output);
print_r($output);
?>
Run Code Online (Sandbox Code Playgroud)