用于计算每秒数据包的Java代码

时间:2015-10-24 19:27:31

标签: java packet rate sdn

我有从SDN接收从交换机到泛光灯控制器的数据包的方法,这意味着每个新的数据包都会触发此方法。我想在该方法中计算每秒的数据包。

这是我的尝试;它是正确的?

int CLoad,avergeLoad =0;
final String switchId = sw.getStringId();
        CLoad = CLoad + 1;
        avergeLoad = CLoad;
        loadTable.put(switchId, avergeLoad);
        ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);
        exec.scheduleAtFixedRate(new Runnable() 
               {
                public void run() 
                  {
                    avergeLoad =(avergeLoad + CLoad)/2;
                loadTable.put(switchId, avergeLoad);
                   CLoad=0;
                  }
               }, 40, 1000, TimeUnit.SECONDS); 

1 个答案:

答案 0 :(得分:1)

您可以使用Metrics meter

  

米以几种不同的方式衡量事件的发生率。该   平均比率是事件的平均比率。它通常很有用   琐事,但因为它代表了你的申请的总费率   整个生命周期(例如,处理的请求总数,除以   通过进程运行的秒数,它没有   提供新的感觉。幸运的是,米也记录了三种不同   指数加权移动平均速率:1分钟,5分钟和15分钟   移动平均线。

的Maven:

<dependency>
    <groupId>io.dropwizard.metrics</groupId>
    <artifactId>metrics-core</artifactId>
    <version>3.1.2</version>
</dependency>

示例代码:

//Setup the reporter
ConsoleReporter reporter = ConsoleReporter.forRegistry(metrics)
       .convertRatesTo(TimeUnit.SECONDS)
       .convertDurationsTo(TimeUnit.MILLISECONDS)
       .build();
   reporter.start(1, TimeUnit.SECONDS);

//Initialize Metrics Metter
final Meter getRequests = registry.meter(name(WebProxy.class, "get-requests", "requests"));

// Mark when event occurs
getRequests.mark();

参考:

  1. Getting started
  2. Metrics meter