2012-06-14 88 views
3

这个lib是一种令人敬畏的CPU,RAM和其他工作人员。但是,我无法弄清楚,如何获得网络速度。这意味着。发送和接收多少数据在一段时间内丢弃网络购物车?有没有办法给我这些数据?Sigar网络速度

这可能是我在寻找什么?

Tcp stat = sigar.getTcp(); 
stat.getInSegs() + " segments received" 
stat.getOutSegs() + " segments send out" 

如果在sigar中没有办法,是否还有其他的lib使用?

感谢对帮助

回答

3

输出:

{则DefaultGateway = 193.171.36.1,PrimaryDns = 140.78.2.62,SecondaryDns = 140.78.3.62,域名=,主机名=施耐德PC}

{Name = eth0,Description = WAN Miniport(IPv6),Metric = 0,Type = Ethernet,Address = 0.0.0.0,Mtu = 1500,Netmask = 0.0.0.0,Flags = 65,Broadcast = 0.0.0.0,Hwaddr = 34:F8:20:52:41:53,目的地= 0.0.0.0}

totalrx下载):4.7K

totaltx(上载):154


totalrx(下载):1.4K

totaltx(上载):180

代码:

import java.util.HashMap; 
import java.util.LinkedList; 
import java.util.List; 
import java.util.Map; 
import java.util.Map.Entry; 

import org.hyperic.sigar.NetFlags; 
import org.hyperic.sigar.NetInterfaceConfig; 
import org.hyperic.sigar.NetInterfaceStat; 
import org.hyperic.sigar.Sigar; 
import org.hyperic.sigar.SigarException; 

/** 
* @author Headgrowe 
* 
*/ 
public class NetworkData { 

    static Map<String, Long> rxCurrentMap = new HashMap<String, Long>(); 
    static Map<String, List<Long>> rxChangeMap = new HashMap<String, List<Long>>(); 
    static Map<String, Long> txCurrentMap = new HashMap<String, Long>(); 
    static Map<String, List<Long>> txChangeMap = new HashMap<String, List<Long>>(); 
    private static Sigar sigar; 

    /** 
    * @throws InterruptedException 
    * @throws SigarException 
    * 
    */ 
    public NetworkData(Sigar s) throws SigarException, InterruptedException { 
     sigar = s; 
     getMetric(); 
     System.out.println(networkInfo()); 
     Thread.sleep(1000);  
    } 

    public static void main(String[] args) throws SigarException, 
      InterruptedException { 
     new NetworkData(new Sigar()); 
     NetworkData.newMetrickThread(); 
    } 

    public static String networkInfo() throws SigarException { 
     String info = sigar.getNetInfo().toString(); 
     info += "\n"+ sigar.getNetInterfaceConfig().toString(); 
     return info; 
    } 

    public static String getDefaultGateway() throws SigarException { 
     return sigar.getNetInfo().getDefaultGateway(); 
    } 

    public static void newMetricThread() throws SigarException, InterruptedException { 
     while (true) { 
      Long[] m = getMetric(); 
      long totalrx = m[0]; 
      long totaltx = m[1]; 
      System.out.print("totalrx(download): "); 
      System.out.println("\t" + Sigar.formatSize(totalrx)); 
      System.out.print("totaltx(upload): "); 
      System.out.println("\t" + Sigar.formatSize(totaltx)); 
      System.out.println("-----------------------------------"); 
      Thread.sleep(1000); 
     } 

    } 

    public static Long[] getMetric() throws SigarException { 
     for (String ni : sigar.getNetInterfaceList()) { 
      // System.out.println(ni); 
      NetInterfaceStat netStat = sigar.getNetInterfaceStat(ni); 
      NetInterfaceConfig ifConfig = sigar.getNetInterfaceConfig(ni); 
      String hwaddr = null; 
      if (!NetFlags.NULL_HWADDR.equals(ifConfig.getHwaddr())) { 
       hwaddr = ifConfig.getHwaddr(); 
      } 
      if (hwaddr != null) { 
       long rxCurrenttmp = netStat.getRxBytes(); 
       saveChange(rxCurrentMap, rxChangeMap, hwaddr, rxCurrenttmp, ni); 
       long txCurrenttmp = netStat.getTxBytes(); 
       saveChange(txCurrentMap, txChangeMap, hwaddr, txCurrenttmp, ni); 
      } 
     } 
     long totalrx = getMetricData(rxChangeMap); 
     long totaltx = getMetricData(txChangeMap); 
     for (List<Long> l : rxChangeMap.values()) 
      l.clear(); 
     for (List<Long> l : txChangeMap.values()) 
      l.clear(); 
     return new Long[] { totalrx, totaltx }; 
    } 

    private static long getMetricData(Map<String, List<Long>> rxChangeMap) { 
     long total = 0; 
     for (Entry<String, List<Long>> entry : rxChangeMap.entrySet()) { 
      int average = 0; 
      for (Long l : entry.getValue()) { 
       average += l; 
      } 
      total += average/entry.getValue().size(); 
     } 
     return total; 
    } 

    private static void saveChange(Map<String, Long> currentMap, 
      Map<String, List<Long>> changeMap, String hwaddr, long current, 
      String ni) { 
     Long oldCurrent = currentMap.get(ni); 
     if (oldCurrent != null) { 
      List<Long> list = changeMap.get(hwaddr); 
      if (list == null) { 
       list = new LinkedList<Long>(); 
       changeMap.put(hwaddr, list); 
      } 
      list.add((current - oldCurrent)); 
     } 
     currentMap.put(ni, current); 
    } 

}