用php获取服务器ram

yod*_*oda 31 php ram

有没有办法通过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)

(请注意:此代码可能需要对您的环境进行一些调整.)

  • upmeoted for meminfo,有3个陷阱: - 它不是'/proc/meminfo.txt',而是'/ proc/meminfo' - 你应该匹配'MemFree',而不是'MemTotal'. - 你忘了fclose();) (5认同)

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)

  • 您可能希望在file_get_contents的结果上添加trim().我得到一个尾随行结束,导致一个空数组键,然后生成一个PHP警告 (5认同)
  • 我猜这是最好的选择,因为问题并没有询问免费内存,而只是内存值,可以是免费,总计等。 (2认同)

fot*_*lab 5

可以使用PHP中的exec函数运行Linux命令.这是有效的,并将完成工作(如果目标是获取内存).

请尝试以下代码:

<?php
  exec("free -mtl", $output);
  print_r($output);
?>
Run Code Online (Sandbox Code Playgroud)