---
title: "[开发笔记]Linux PHP获取CPU内存带宽使用情况"
id: "80"
type: "post"
slug: "%e5%bc%80%e5%8f%91%e7%ac%94%e8%ae%b0linux-php%e8%8e%b7%e5%8f%96cpu%e5%86%85%e5%ad%98%e5%b8%a6%e5%ae%bd%e4%bd%bf%e7%94%a8%e6%83%85%e5%86%b5"
published_at: "2016-05-04T08:48:17+00:00"
modified_at: "2018-09-12T11:58:46+00:00"
url: "https://www.hitsword.org/2016/80.html"
markdown_url: "https://www.hitsword.org/2016/80.md"
excerpt: "[php] <?php /* CPU */ unset($pattern, $str, $out); $str = shell_exec('more /proc/stat'); $pattern = \"/(cpu[0-9]?)[\\s]+([0-9]+)[\\s]+([0-9]+)[\\s]+([0-9]+)[\\s]+([0-9]+)[\\s]+([0-9]+)[\\s]+([0-9]+)[\\s]+([0-9]+)/\"; preg_match_all($pattern, $str, $out); $res['cpu'] = round(100*($out[1][0]+$out[2][0]+$out[3][0])/($out[4][0]+$out[5][0]+$out[6][0]+$out[7][0]),2); /* MEM */ unset($pattern, $str, $out); $str = shell_exec('more /proc/meminfo'); $pattern = \"/(.+):\\s*([0-9]+)/\"; preg_match_all($pattern, $str, $out); $res['mem']['total'] = round($out[2][0]/1024);..."
taxonomy_category:
  - "PHP"
taxonomy_post_tag:
  - "CPU"
  - "Linux"
  - "PHP"
  - "内存"
  - "带宽"
---

# [开发笔记]Linux PHP获取CPU内存带宽使用情况

```
<?php
/* CPU */
unset($pattern, $str, $out);
$str = shell_exec('more /proc/stat');
$pattern = "/(cpu[0-9]?)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)[\s]+([0-9]+)/";
preg_match_all($pattern, $str, $out);
$res['cpu'] = round(100*($out[1][0]+$out[2][0]+$out[3][0])/($out[4][0]+$out[5][0]+$out[6][0]+$out[7][0]),2);
/* MEM */
unset($pattern, $str, $out);
$str = shell_exec('more /proc/meminfo');
$pattern = "/(.+):\s*([0-9]+)/";
preg_match_all($pattern, $str, $out);
$res['mem']['total'] = round($out[2][0]/1024);
$res['mem']['use'] = round(($out[2][0]-$out[2][1]-$out[2][2]-$out[2][3])/1024);
$res['mem']['percent'] = round(100*($out[2][0]-$out[2][1]-$out[2][2]-$out[2][3])/$out[2][0]);
/* NET */
unset($pattern, $str, $out);
$str = shell_exec('cat /proc/net/dev');
$pattern = "/eth.*/";
preg_match_all($pattern, $str, $out);
foreach ($out[0] as &$value) {
  $eth = explode(":",$value);
  $net[$eth[0]] = array_values(array_filter(explode(' ',$eth[1]),"check"));
}
function check($var){
  if(is_numeric($var)){
    return true;
  }else{
    return false;
  }
}
foreach ($net as $key => $value) {
 	$res['net'][$key]['in'] = $value[0];
 	$res['net'][$key]['out'] = $value[8];
}
print_r($res);
```
