サーバー (Linux ディストリビューション) で使用可能な RAM を PHP (Linux コマンドを使用して widthout) で知る方法はありますか?
編集:申し訳ありませんが、目的は、特定のサーバーのサーバー/仮想マシンで使用可能なRAMを認識することです(そのメモリが共有されている場合でも)。
このコードが Linux でのみ実行されることがわかっている場合は、特殊/proc/meminfo
ファイルを使用して、システムの仮想メモリ サブシステムに関する情報を取得できます。ファイルの形式は次のとおりです。
MemTotal: 255908 kB
MemFree: 69936 kB
Buffers: 15812 kB
Cached: 115124 kB
SwapCached: 0 kB
Active: 92700 kB
Inactive: 63792 kB
...
その最初の行 に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"; ?>
(注: このコードは、環境に合わせて微調整する必要がある場合があります。)
すべてを配列に使用/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;
}
?>
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"
...
Linux コマンドは、PHPのexec関数を使用して実行できます。これは効率的であり、仕事をします(目的がメモリを取得することである場合)。
次のコードを試してください。
<?php
exec("free -mtl", $output);
print_r($output);
?>
Windows では、シェル コマンド systeminfo の出力を実行して解析することで、この情報 (およびその他の情報) を取得できることに注意してください。
私はそのような関数を見たことがないのを覚えていません-実際には、PHPが何のために作られているのかという範囲外です。
そのような機能があったとしても、おそらく基盤となるオペレーティングシステムに固有の方法で実装され、LinuxとWindowsの両方で機能しない可能性があります(sys_getloadavg
そのようなものの例については、を参照してください)。