package com.outbrain.gruffalo; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import org.apache.commons.lang3.time.StopWatch; import org.joda.time.DateTime; public class UDPBenchmark { public static void main(final String[] args) throws IOException, InterruptedException { final int nThreads = 8; final ExecutorService executor = Executors.newFixedThreadPool(nThreads); for (int i = 0; i < nThreads; i++) { executor.execute(new BenchmarkTask()); } executor.awaitTermination(60, TimeUnit.SECONDS); executor.shutdown(); } private static class BenchmarkTask implements Runnable { @Override public void run() { DatagramSocket socket; InetAddress localhost; try { socket = new DatagramSocket(); localhost = InetAddress.getByName("localhost"); } catch (final IOException e) { throw new RuntimeException(e); } final StringBuilder payload = new StringBuilder(40); final StopWatch time = new StopWatch(); time.start(); for (int i = 0; i < 2000000; i++) { payload.append(i).append(" - ").append(new DateTime()).append('\n'); try { socket.send(new DatagramPacket(payload.toString().getBytes(), payload.length(), localhost, 2004)); } catch (final IOException e) { throw new RuntimeException(e); } payload.delete(0, 40); // if (i % 1000 == 0) { // Thread.sleep(100); // } } time.stop(); System.out.println("Total time " + time); } } }