Skip to content

Instantly share code, notes, and snippets.

@alexvictoor
Created February 8, 2015 23:18
Show Gist options
  • Save alexvictoor/651c41dfdb19bd3757ee to your computer and use it in GitHub Desktop.
Save alexvictoor/651c41dfdb19bd3757ee to your computer and use it in GitHub Desktop.
Quick hdr histogram experiment
package com.github.alexvictoor;
import org.HdrHistogram.Histogram;
import org.HdrHistogram.SynchronizedHistogram;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
LatencyMonitor monitor = new LatencyMonitor(100);
monitor.begin("aa", 100);
monitor.begin("bb", 1000);
monitor.end("aa", 1100);
monitor.end("bb", 3000);
for (int i=0; i<1000; i++) {
monitor.begin("a"+i, 0);
monitor.end("a"+i, i %100);
}
monitor.logMeasures();
}
}
package com.github.alexvictoor;
import org.HdrHistogram.Histogram;
import org.HdrHistogram.SynchronizedHistogram;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
public class LatencyMonitor {
private final Map<Object, Long> timestamps;
private final Histogram histogram;
public LatencyMonitor(int cacheSize) {
this.timestamps = Collections.synchronizedMap(new BoundedMap<Object, Long>(cacheSize));
this.histogram = new SynchronizedHistogram(5);
}
public void begin(Object treatmentId, long beginTimestamp) {
timestamps.put(treatmentId, beginTimestamp);
}
public void end(Object treatmentId, long endTimestamp) {
Long beginTimestamp = timestamps.remove(treatmentId);
if (beginTimestamp != null) {
long duration = endTimestamp - beginTimestamp;
histogram.recordValue(duration);
}
}
public void logMeasures() {
histogram.outputPercentileDistribution(System.out, 1d);
}
private class BoundedMap<K, V> extends LinkedHashMap<K, V> {
private final int maxSize;
private BoundedMap(int size) {
this.maxSize = size;
}
@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
return size() > maxSize;
}
}
}
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.alexvictoor</groupId>
<artifactId>latency-monitor</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>latency-monitor</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.hdrhistogram</groupId>
<artifactId>HdrHistogram</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment