is_show = 1; break; default : $this->is_show = 0; break; } } public function index() { $system_info = Redis::get('system_info'); if (is_null($system_info)) { $this->loadAvg = $this->getLoadAvg(); $this->cpu = $this->getCpu(); $this->RAM = $this->getRAM(); $this->disk = $this->getDisk(); $data = [ $this->loadAvg, $this->cpu, $this->RAM, $this->disk ]; Redis::setnx('system_info', json_encode($data)); Redis::expire('system_info', 120); } else { $system_info = json_decode($system_info); $this->loadAvg = $system_info[0]; $this->cpu = $system_info[1]; $this->RAM = $system_info[2]; $this->disk = $system_info[3]; } return [ 'loadAvg' => $this->loadAvg, 'cpu' => $this->cpu, 'RAM' => $this->RAM, 'disk' => $this->disk, 'is_show' => $this->is_show, ]; } /** * @return bool * @return 实例 : 1.63 0.61 0.22 * 1.63(1分钟平均负载) 0.61(5分钟平均负载) 0.22(15分钟平均负载) 1/228(分子是当前正在运行的进程数,分母是总的进程数) */ private function getLoadAvg() { if (false === ($str = @file("/proc/loadavg"))) return false; $str = explode(" ", implode("", $str)); $str = array_chunk($str, 4); $percent = explode('/' ,$str[0][3]); $str[0][3] = round($percent[0]/$percent[1]*100, 2); return $str[0]; } private function getCpu() { if (false === ($str = @file("/proc/cpuinfo"))) return false; $str = implode("", $str); @preg_match_all("/model\s+name\s{0,}\:+\s{0,}([\w\s\)\(\@.-]+)([\r\n]+)/s", $str, $model); if (false !== is_array($model[1])) { $res['cpu']['num'] = sizeof($model[1]); if ($res['cpu']['num'] == 1) $x1 = ''; else $x1 = ' ×' . $res['cpu']['num']; $res['cpu']['model'][] = $model[1][0]; if (false !== is_array($res['cpu']['model'])) $res['cpu']['model'] = implode("
", $res['cpu']['model']); $stat1 = self::GetCoreInformation(); sleep(1); $stat2 = self::GetCoreInformation(); $data = self::GetCpuPercentages($stat1, $stat2); $res['cpu']['using'] = $data['cpu0']['user']; //cpu使用率 return $res['cpu']; } } private function getRAM() { if (false === ($str = @file("/proc/meminfo"))) return false; $str = implode("", $str); preg_match_all("/MemTotal\s{0,}\:+\s{0,}([\d\.]+).+?MemFree\s{0,}\:+\s{0,}([\d\.]+).+?Cached\s{0,}\:+\s{0,}([\d\.]+).+?SwapTotal\s{0,}\:+\s{0,}([\d\.]+).+?SwapFree\s{0,}\:+\s{0,}([\d\.]+)/s", $str, $buf); preg_match_all("/Buffers\s{0,}\:+\s{0,}([\d\.]+)/s", $str, $buffers); $res['memTotal'] = round($buf[1][0]/1024, 2); $res['memBuffers'] = round($buffers[1][0]/1024, 2); $res['memFree'] = round($buf[2][0]/1024, 2); $res['memCached'] = round($buf[3][0]/1024, 2); $res['memUsed'] = round($res['memTotal']-$res['memFree'] ,3); $res['memRealUsed'] = $res['memTotal'] - $res['memFree'] - $res['memCached'] - $res['memBuffers']; //真实内存使用 $res['memRealFree'] = $res['memTotal'] - $res['memRealUsed']; //真实空闲 $res['memPercent'] = (floatval($res['memTotal'])!=0)?round($res['memRealUsed']/$res['memTotal']*100,2):0; if($res['memTotal']<1024) { $res['memTotal'] = $res['memTotal']." M"; $res['memUsed'] = $res['memRealUsed']." M"; $res['memFree'] = $res['memRealFree']." M"; } else { $res['memTotal'] = round($res['memTotal']/1024,3)." G"; $res['memUsed'] = round($res['memRealUsed']/1024,3)." G"; $res['memFree'] = round($res['memRealFree']/1024,3)." G"; } return $res; } private function getDisk() { //硬盘 $re['total'] = round(@disk_total_space(".")/(1024*1024*1024),3); //总 $re['free'] = round(@disk_free_space(".")/(1024*1024*1024),3); //可用 $re['used'] = round($re['total']-$re['free'], 3); //已用 $re['percent'] = (floatval($re['total'])!=0)?round($re['used']/$re['total']*100,2):0; return $re; } private function GetCoreInformation() {$data = file('/proc/stat');$cores = array();foreach( $data as $line ) {if( preg_match('/^cpu[0-9]/', $line) ){$info = explode(' ', $line);$cores[]=array('user'=>$info[1],'nice'=>$info[2],'sys' => $info[3],'idle'=>$info[4],'iowait'=>$info[5],'irq' => $info[6],'softirq' => $info[7]);}}return $cores;} private function GetCpuPercentages($stat1, $stat2) {if(count($stat1)!==count($stat2)){return;}$cpus=array();for( $i = 0, $l = count($stat1); $i < $l; $i++) { $dif = array(); $dif['user'] = $stat2[$i]['user'] - $stat1[$i]['user'];$dif['nice'] = $stat2[$i]['nice'] - $stat1[$i]['nice']; $dif['sys'] = $stat2[$i]['sys'] - $stat1[$i]['sys'];$dif['idle'] = $stat2[$i]['idle'] - $stat1[$i]['idle'];$dif['iowait'] = $stat2[$i]['iowait'] - $stat1[$i]['iowait'];$dif['irq'] = $stat2[$i]['irq'] - $stat1[$i]['irq'];$dif['softirq'] = $stat2[$i]['softirq'] - $stat1[$i]['softirq'];$total = array_sum($dif);$cpu = array();foreach($dif as $x=>$y) $cpu[$x] = round($y / $total * 100, 2);$cpus['cpu' . $i] = $cpu;}return $cpus;} }