首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得一台计算机的平均CPU/处理器使用率?

如何获得一台计算机的平均CPU/处理器使用率?
EN

Stack Overflow用户
提问于 2010-08-20 12:10:03
回答 1查看 1.8K关注 0票数 3

现在,我正在用PHP和Perl编写一个程序来读取计算机的系统数据,并且我们一直在使用SNMP来收集数据(或者更确切地说,是被迫这样做)。检索数据后,我们应该将数据存储在数据库中,然后使用这些数据绘制折线图。

目前,我正在使用这个perl脚本来检索计算机的CPU/处理器使用情况。

代码语言:javascript
复制
  $MIB1 = ".1.3.6.1.2.1.25.3.3.1.2"; #Cpu Processors
  $HOST = shift; #or localhost for testing

  $count = 0;
      #print out all the processors of the computer and their values
      #SNMP is used with perl because of the libraries
      #snmpwalk retrieves information from the computers by the computer name and MIB
      #as there are many values, they are stored in an array to be used
      (@values) = &snmpwalk("$HOST","$MIB1");
      foreach $value (@values)
      {
          $count++;
          if ($value) {
              #fixes the value for presentation
              $goodvalue = &strip_comment($value);
              #prints out the result. $count will count out the processor number
              print "CPU Usage of Processor $count: $goodvalue%\n"; }
              if ($value > 90){
                  #warns user if the processor usage is over 90%
                  print "Warning: CPU Usage over 90%! \n"
              }
          else { warn "No response from host :$HOST:\n"; } #provides error
      }

代码,或者更确切地说,SNMP检索几个单独的处理器,许多人应该知道在一台计算机上可以有多个处理器,因此将这些数据存储到数据库中并不是很实用(例如,如果一台计算机只有2个处理器,下一台计算机有4个处理器,而房间对面的计算机有100个处理器)。

因此,我想知道是否有人可以帮助改进此代码或更改它,以便我可以将它们全部添加到一起,并找到CPU/处理器使用率的平均值并将其存储到数据库中。因为,我不太确定如何去做,因为循环一次只扫描一个处理器,并且可能不知道有多少个处理器。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2010-08-20 14:00:00

使用主机和cpu编号作为双键,并使用分组依据来获得平均值。

下面是一个使用sqlite3的示例。

首先创建表:

代码语言:javascript
复制
CREATE TABLE cpu (host string, cpu integer, load integer, primary key (host, cpu));

然后插入一些测试数据(这将由您的perl脚本完成):

代码语言:javascript
复制
INSERT INTO cpu (host, cpu, load) VALUES ("appserv", 1, 25);
INSERT INTO cpu (host, cpu, load) VALUES ("appserv", 2, 15);
INSERT INTO cpu (host, cpu, load) VALUES ("dbserv", 1, 10);
INSERT INTO cpu (host, cpu, load) VALUES ("dbserv", 2, 30);
INSERT INTO cpu (host, cpu, load) VALUES ("dbserv", 3, 5);
INSERT INTO cpu (host, cpu, load) VALUES ("dbserv", 4, 5);

现在,您可以获得每个主机的平均负载,可以使用PHP检索和绘制该负载:

代码语言:javascript
复制
SELECT host, avg(load) FROM cpu GROUP BY host;

appserv|20.0
dbserv|12.5

所有主机的总平均值:

代码语言:javascript
复制
SELECT avg(load) FROM cpu;

15.0

或查找任何具有高负载的主机:

代码语言:javascript
复制
SELECT host FROM cpu WHERE load > 25;

dbserv

您可能希望创建一个所有计算机的表,并将其链接到上面的cpu表,用computer_id交换主机字符串。

所有这些都假设您使用的是关系数据库(即SQLite、MySQL、Oracle等)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3528134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档