Created
February 8, 2015 23:18
-
-
Save alexvictoor/651c41dfdb19bd3757ee to your computer and use it in GitHub Desktop.
Quick hdr histogram experiment
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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