zoukankan      html  css  js  c++  java
  • sigar监控

    相关参照博客:

    http://liningjustsoso.iteye.com/blog/1254584

    http://blog.csdn.net/aoxida/article/category/1259086

    jar包

    我这里是一个使用timer+sigar的例子,之后用quartz做了后台任务修改,可以看另外那篇文章

    实现功能是每秒查一下网卡的流量

    package com.dsideal.Util;
    
    import java.util.Timer;
    import java.util.TimerTask;
    
    import org.hyperic.sigar.NetInterfaceConfig;
    import org.hyperic.sigar.NetInterfaceStat;
    import org.hyperic.sigar.Sigar;
    import org.hyperic.sigar.SigarException;
    import org.hyperic.sigar.SigarNotImplementedException;
    
    import com.jfinal.plugin.memcached.MemcachedKit;
    import com.jfinal.plugin.memcached.MemcachedPlugin;
    
    
    public class SigarTest extends TimerTask{
        public static void main(String[] args) throws Exception {
              
            Timer timer = new Timer();
            timer.schedule(new SigarTest(), 1000, 1000);
            
        }
        
        public static int getCpuCount() throws SigarException {  
            Sigar sigar = new Sigar();  
            try {  
                return sigar.getCpuInfoList().length;  
            } finally {  
                sigar.close();  
            }  
        }  
        
        private static long dfRxBytes = 0;
        private static long dfTxBytes = 0;
        public static long dfRxBytesMb = 0; //每秒接收的总字节数
        public static long dfTxBytesMb = 0; //每秒发送的总字节数
        public void testNetIfList()  {  
            try {
                 MemcachedPlugin memcachedPlugin = new MemcachedPlugin("10.10.3.151:11211");
                 memcachedPlugin.start();
                Sigar sigar = new Sigar();  
                String ifNames[] = sigar.getNetInterfaceList();  
                for (int i = 0; i < ifNames.length; i++) {  
                    String name = ifNames[i];  
                    if(name.equals("eth6")) {
                        NetInterfaceConfig ifconfig = sigar.getNetInterfaceConfig(name);  
    //                    print("
    name(网络设备名) = " + name);// 网络设备名  
    //                    print("Address(IP地址) = " + ifconfig.getAddress());// IP地址  
    //                    print("Netmask(子网掩码) = " + ifconfig.getNetmask());// 子网掩码  
                        if ((ifconfig.getFlags() & 1L) <= 0L) {  
    //                        print("!IFF_UP...skipping getNetInterfaceStat");  
                            continue;  
                        }  
                        try {  
                            NetInterfaceStat ifstat = sigar.getNetInterfaceStat(name);  
    //                        print("RxPackets(接收的总包裹数) = " + ifstat.getRxPackets());// 接收的总包裹数  
    //                        print("TxPackets(发送的总包裹数) = " + ifstat.getTxPackets());// 发送的总包裹数 
                            if (dfRxBytes == 0) {
                                dfRxBytes = ifstat.getRxBytes();
                            }
    //                        print("RxBytes(接收到的总字节数) = " + ifstat.getRxBytes());// 接收到的总字节数  
    //                        print("-------------------------------------------");
    //                        print("RxBytes(每秒接收到的总字节数) = " + (ifstat.getRxBytes() - dfRxBytes) + "B");// 接收到的总字节数  
    //                        print("RxBytes(每秒接收到的总字节数) = " + ((ifstat.getRxBytes() - dfRxBytes) /1024) + "KB");// 接收到的总字节数  
                            dfRxBytesMb = (ifstat.getRxBytes() - dfRxBytes) /1024 /1024;
                            print("RxBytes(每秒接收到的总字节数) = " + dfRxBytesMb + "MB");// 接收到的总字节数  
    //                        print("-------------------------------------------");
                            dfRxBytes = ifstat.getRxBytes();
    //                        print("TxBytes(发送的总字节数) = " + ifstat.getTxBytes());// 发送的总字节数  
    //                        print("-------------------------------------------");
    //                        print("TxBytes(每秒发送的总字节数) = " + (ifstat.getTxBytes() - dfTxBytes) + "B");// 发送的总字节数    
    //                        print("TxBytes(每秒发送的总字节数) = " + ((ifstat.getTxBytes() - dfTxBytes) /1024) + "KB");// 发送的总字节数    
                            if (dfTxBytes != 0) {
                                 dfTxBytesMb = (ifstat.getTxBytes() - dfTxBytes) /1024 /1024 ;
                                 MemcachedKit.set("dfTxBytesMb", 0, dfTxBytesMb);
    //                             System.out.println("dfTxBytesMb="+MemcachedKit.get("dfTxBytesMb"));
                            }
                            print("TxBytes(每秒发送的总字节数) = " + dfTxBytesMb + "MB");// 发送的总字节数   
    //                        print("-------------------------------------------");
    //                        if (((ifstat.getTxBytes() - dfTxBytes) /1024 /1024) <= 8) {
    //                            this.printA();
    //                        } else {
    //                            this.printB();
    //                        }
                            dfTxBytes = ifstat.getTxBytes();
    //                        print("RxErrors(接收到的错误包数) = " + ifstat.getRxErrors());// 接收到的错误包数  
    //                        print("TxErrors(发送数据包时的错误数) = " + ifstat.getTxErrors());// 发送数据包时的错误数  
    //                        print("RxDropped(接收时丢弃的包数) = " + ifstat.getRxDropped());// 接收时丢弃的包数  
    //                        print("TxDropped(发送时丢弃的包数) = " + ifstat.getTxDropped());// 发送时丢弃的包数  
                        } catch (SigarNotImplementedException e) {  
                             print(e.getMessage());  
                        } catch (SigarException e) {  
                            print(e.getMessage());  
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }  
            } catch (Exception e) {
                // TODO: handle exception
            }
            
        }
        
        void print(String msg) {  
            System.out.println(msg);  
        }
    
        @Override
        public void run() {
            SigarTest s =new SigarTest();
            s.testNetIfList();
            
        }  
        
        public static void printA() {
            System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAA");
        }
        
        public static void printB() {
            System.out.println("BBBBBBBBBBBBBBBBBBBBBBBBBBBB");
        }
        
    }
  • 相关阅读:
    第二阶段冲刺01
    客户端-服务器模式
    可用性和可修改性战术分析
    质量属性
    《架构漫谈》阅读笔记
    《软件需求模式》06
    《软件需求模式》05
    《软件需求模式》04
    《软件需求模式》03
    《软件需求模式》02
  • 原文地址:https://www.cnblogs.com/cczhoufeng/p/3520250.html
Copyright © 2011-2022 走看看