【问题标题】:Java high speed udp traffic packet receiving for bandwidth testingJava高速udp流量包接收带宽测试
【发布时间】:2012-12-07 20:33:39
【问题描述】:

我正在尝试构建一个带宽测试工具,有点像 IPerf,但在 java 中,我的丢包率似乎比预期的要多,但是带宽稍高(从大约 30-40Mb/s 开始),我希望有人可能会指出一些优化或我做错的事情,这会导致我丢失数据包。

这是接收代码,它将大小为 2000 的队列移交给另一个收集指标的类,它只传递数据包中的相关信息。使用蔚来

while (data.isRunning()) 
{
    if(channel.receive(buf) != null)
    {

    int j = buf.array().length;
    //add the packets important information to the queue
    packet_info.add(new PacketInfoContainer(buf.getLong(j-12), System.nanoTime(), buf.getInt(j-4)));

    // if we have 2000 packets worth of information, time to handle it!
    if((packet_info.size() == 2000))
    {
        Runnable r1;
        //if this is running on the client side, do it this way so that we can calculate progress
        if(client_side)
        {
            if(data_con.isUserRequestStop())
            {
                System.out.println("suposed to quit");
                data.stopTest();
                break;
            }
            if(packets_expected > 0)
            {
                total_packets_received+=1000;
                setChanged();
                notifyObservers("update_progress" + Integer.toString( (int) (((double)total_packets_received/(double)packets_expected) * 1000) ) );
            }
            r1 = new PacketHandler(packet_info, results, buffer_size, client);
        }
        //server side, no nonsense
        else
        {
            r1 = new PacketHandler(packet_info, results, buffer_size);
        }
        pool.submit(r1);
        packet_info = new LinkedList<PacketInfoContainer>();
    }

}
buf.clear();

}

【问题讨论】:

  • 你有什么要比较的吗? UDP是有损的。小优化:不要使用LinkedList,你已经知道大小了。您还可以尝试将new Stuff 替换为可重用对象池。 PacketInfoContainer 可能值得
  • 我运行了我的测试,并且 iperf 使用具有相同数据包大小的 udp,在相同的速度下,我的测试在相当一致的基础上比 iperf 获得更多的数据包丢失。

标签: java nio bandwidth


【解决方案1】:

UDP 不是很好...也许你可以使用 TCP 并检查 S.O. 的 tcp 统计信息。看重传...

netstat -s

您可以使用CharacterGenerator,将 BufferedOutputStream 更改为 64KB 并删除 os.flush();加速和测试...

【讨论】:

    【解决方案2】:

    我还不能评论,我去吧。

    在达到线路限制之前,您不应该看到丢弃的数据包。我建议在花大量时间查看代码之前隔离丢包问题并使用工具确定您是否有硬件/环境问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2015-12-29
      相关资源
      最近更新 更多