注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

金生丽水,雨润轩德

 
 
 

日志

 
 

使用JAVA SNMP监控HP UNIX的CPU和内存  

2014-12-25 08:58:15|  分类: HPUX |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
   摘自:http://blog.csdn.net/knight12/article/details/721887
通过SNMP协议访问HP-UNIX的内存/CPU使用情况的OID为:
          "1.3.6.1.4.1.11.2.3.1.1.7.0      //FreeMemory
          "1.3.6.1.4.1.11.2.3.1.1.8.0"     //TotalMemory
          "1.3.6.1.4.1.11.2.3.1.1.13.0"    //CPUUser
          "1.3.6.1.4.1.11.2.3.1.1.14.0"    //CPUSystem
          "1.3.6.1.4.1.11.2.3.1.1.15.0"    //CPUIdle
          "1.3.6.1.4.1.11.2.3.1.1.16.0"    //CPUNice
        其中前两项为数量值,以KB为单位,所以可以很方便的取到内存使用情况。后四项时计数项,所以要计算CPU的使用率,就比较麻烦了。

        通过使用JAVA SNMP包(网上可以找到),可以方便的连接到要监控的机器上:

=================================================
  private SNMPv1CommunicationInterface _snmpConn;
  private long _lOldIdle = 0;
  private long _lOldSystem = 0;
  private long _lOldNice = 0;
  private long _lOldUser = 0;
  
  public static void main(String[] sArgs)
  {
   InetAddress hostAddress = InetAddress.getByName("127.0.0.1");  //machine ip
   SNMPv1CommunicationInterface snmpConn = new SNMPv1CommunicationInterface(0, hostAddress, "public");
   while(true)
   {
    try
    {
     double[] dCpu = getCPUInfo();
     long[] lMemory = getMemoryInfo();
     System.out.println("values");     //将这些值输出到屏幕,也可以到文档或数据结构中
     Thread.sleep(1000);               //每秒取一次,可以自行调整
    }
    catch(Exception E)
    {
     E.printStackTrace();
    }
   }
  }
  
       //取得CPU空闲率,使用率(User/System/Nice)
       //需要保存上一个监控点的计数,再将本次监控的值减去上一个监控点的计数
       //将Idel/System/User/Nice四个值相加得到总CPU计数
       //分别和Idel/System/User/Nice四个值相比就得到CPU空闲率和使用率了
  protected double[] getCPUInfo()
  {
   long lCurCpuUser = getValue("1.3.6.1.4.1.11.2.3.1.1.13.0");
   long lCurCpuSystem = getValue("1.3.6.1.4.1.11.2.3.1.1.14.0");
   long lCurCpuIdle = getValue("1.3.6.1.4.1.11.2.3.1.1.15.0");
   long lCurCpuNice = getValue("1.3.6.1.4.1.11.2.3.1.1.16.0");
   long lSubCpuUser = lCurCpuUser - _lOldUser;
   long lSubCpuSystem = lCurCpuSystem - _lOldSystem;
   long lSubCpuIdle = lCurCpuIdle - _lOldIdle;
   long lSubCpuNice = lCurCpuNice - _lOldNice;
   long lTotal = lSubCpuUser + lSubCpuSystem + lSubCpuIdle + lSubCpuNice;

   _lOldUser = lCurCpuUser;
   _lOldSystem = lCurCpuSystem;
   _lOldIdle = lCurCpuIdle;
   _lOldNice = lCurCpuNice;
   if(lTotal != 0)
   {
    double dCpuUser = (double)(lSubCpuUser * 100) / (double)lTotal;
    double dCpuSystem = (double)(lSubCpuSystem * 100) / (double)lTotal;
    double dCpuIdle = (double)(lSubCpuIdle * 100) / (double)lTotal;
    double dCpuNice = (double)(lSubCpuNice * 100) / (double)lTotal;
    return new double[]{dCpuUser, dCpuSystem, dCpuIdle, dCpuNice};
   }
   else
   {
    return new double[]{0.0, 0.0, 0.0, 0.0};
   }
  }
  
       //取得空闲物理内存和总物理内存
       //直接取得相应OID的值
       //如果要计算内存使用率,将(lSystemMemory-lFreeMemory)*100/lSystemMemory即可,计算前要转换成double型计算
  protected long[] getMemoryInfo()
  {
   long lFreeMemory = getValue("1.3.6.1.4.1.11.2.3.1.1.7.0");
   long lSystemMemory = getValue("1.3.6.1.4.1.11.2.3.1.1.8.0);
   return new long[]{lFreeMemory, lSystemMemory};
  }
  
        //通过SNMP协议取得指定OID的值
  protected long getValue(String sOID)
  {
   try
   {
    SNMPVarBindList newVars = snmpConn.getMIBEntry(sOID);
    SNMPSequence pair = (SNMPSequence)(newVars.getSNMPObjectAt(0));
    SNMPObject snmpValue = pair.getSNMPObjectAt(1);
    BigInteger biValue = (BigInteger)snmpValue.getValue();
    return biValue.longValue();
   }
   catch(Exception E)
   {
    System.out.println("Encounter exception while getting value " +
     "which OID is " + sOID + " by SNMP: " + E.getMessage());
    return 0;
   }
  }
=================================================

        结合JFreeChart等开源包,将监控结果作成图型,就比较完美了。

  评论这张
 
阅读(2178)| 评论(0)
推荐

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018