Skip to content
Snippets Groups Projects
Commit eba68f4e authored by Florian Fittkau's avatar Florian Fittkau
Browse files

fixed long GC calls for large traces

parent a2985754
No related branches found
No related tags found
No related merge requests found
...@@ -24,6 +24,14 @@ class TraceReconstructionBuffer { ...@@ -24,6 +24,14 @@ class TraceReconstructionBuffer {
private long lastBufferInsert = -1; private long lastBufferInsert = -1;
private int maxOrderIndex = -1; private int maxOrderIndex = -1;
public void clear() {
events.clear();
openEvents = 0;
updatedInThisPeriod = true;
lastBufferInsert = -1;
maxOrderIndex = -1;
}
public final void insertEvent(final AbstractEventRecord event) { public final void insertEvent(final AbstractEventRecord event) {
updatedInThisPeriod = true; updatedInThisPeriod = true;
setMaxOrderIndex(event); setMaxOrderIndex(event);
...@@ -90,6 +98,6 @@ class TraceReconstructionBuffer { ...@@ -90,6 +98,6 @@ class TraceReconstructionBuffer {
} }
} }
} }
return new Trace(events, valid); return new Trace(new ArrayList<AbstractEventRecord>(events), valid);
} }
} }
package explorviz.live_trace_processing.filter.reconstruction; package explorviz.live_trace_processing.filter.reconstruction;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
...@@ -20,6 +21,7 @@ public final class TraceReconstructionFilter extends AbstractFilter implements I ...@@ -20,6 +21,7 @@ public final class TraceReconstructionFilter extends AbstractFilter implements I
private final long maxTraceTimeout; private final long maxTraceTimeout;
private final Map<Long, TraceReconstructionBuffer> traceId2trace = new ConcurrentSkipListMap<Long, TraceReconstructionBuffer>(); private final Map<Long, TraceReconstructionBuffer> traceId2trace = new ConcurrentSkipListMap<Long, TraceReconstructionBuffer>();
private final LinkedList<TraceReconstructionBuffer> freeBufferCache = new LinkedList<TraceReconstructionBuffer>();
public TraceReconstructionFilter(final long maxTraceTimeout, public TraceReconstructionFilter(final long maxTraceTimeout,
final ITraceReduction traceReduction) { final ITraceReduction traceReduction) {
...@@ -33,13 +35,15 @@ public final class TraceReconstructionFilter extends AbstractFilter implements I ...@@ -33,13 +35,15 @@ public final class TraceReconstructionFilter extends AbstractFilter implements I
if (record instanceof AbstractEventRecord) { if (record instanceof AbstractEventRecord) {
final AbstractEventRecord abstractOperationEvent = ((AbstractEventRecord) record); final AbstractEventRecord abstractOperationEvent = ((AbstractEventRecord) record);
final long traceId = abstractOperationEvent.getTraceId(); final Long traceId = abstractOperationEvent.getTraceId();
final TraceReconstructionBuffer traceBuffer = getBufferForTraceId(abstractOperationEvent final TraceReconstructionBuffer traceBuffer = getBufferForTraceId(abstractOperationEvent
.getTraceId()); .getTraceId());
traceBuffer.insertEvent(abstractOperationEvent); traceBuffer.insertEvent(abstractOperationEvent);
if (traceBuffer.isFinished()) { if (traceBuffer.isFinished()) {
traceId2trace.remove(traceId); traceId2trace.remove(traceId);
traceBuffer.clear();
freeBufferCache.addLast(traceBuffer);
deliver(traceBuffer.toTrace(true)); deliver(traceBuffer.toTrace(true));
} }
} else if (record instanceof Trace) { } else if (record instanceof Trace) {
...@@ -64,7 +68,11 @@ public final class TraceReconstructionFilter extends AbstractFilter implements I ...@@ -64,7 +68,11 @@ public final class TraceReconstructionFilter extends AbstractFilter implements I
private final TraceReconstructionBuffer getBufferForTraceId(final long traceId) { private final TraceReconstructionBuffer getBufferForTraceId(final long traceId) {
TraceReconstructionBuffer traceBuffer = traceId2trace.get(traceId); TraceReconstructionBuffer traceBuffer = traceId2trace.get(traceId);
if (traceBuffer == null) { if (traceBuffer == null) {
if (freeBufferCache.isEmpty()) {
traceBuffer = new TraceReconstructionBuffer(); traceBuffer = new TraceReconstructionBuffer();
} else {
traceBuffer = freeBufferCache.removeFirst();
}
traceId2trace.put(traceId, traceBuffer); traceId2trace.put(traceId, traceBuffer);
} }
return traceBuffer; return traceBuffer;
...@@ -84,6 +92,8 @@ public final class TraceReconstructionFilter extends AbstractFilter implements I ...@@ -84,6 +92,8 @@ public final class TraceReconstructionFilter extends AbstractFilter implements I
if ((timestamp - traceBuffer.getLastBufferInsert()) <= traceTimeout) { if ((timestamp - traceBuffer.getLastBufferInsert()) <= traceTimeout) {
deliver(traceBuffer.toTrace(false)); deliver(traceBuffer.toTrace(false));
traceIdsToRemove.add(entry.getKey()); traceIdsToRemove.add(entry.getKey());
traceBuffer.clear();
freeBufferCache.addLast(traceBuffer);
} }
} }
} }
......
...@@ -22,6 +22,8 @@ public class TracePatternSummarizationFilter extends AbstractFilter implements I ...@@ -22,6 +22,8 @@ public class TracePatternSummarizationFilter extends AbstractFilter implements I
private final Map<Trace, TracePatternSummarizationBuffer> trace2buffer = new ConcurrentSkipListMap<Trace, TracePatternSummarizationBuffer>( private final Map<Trace, TracePatternSummarizationBuffer> trace2buffer = new ConcurrentSkipListMap<Trace, TracePatternSummarizationBuffer>(
new TraceComperator()); new TraceComperator());
// TODO cache for buffer objects
public TracePatternSummarizationFilter(final long maxCollectionDuration, public TracePatternSummarizationFilter(final long maxCollectionDuration,
final IPipeReceiver sinkReceiver) { final IPipeReceiver sinkReceiver) {
super(sinkReceiver, Constants.TRACE_SUMMARIZATION_DISRUPTOR_SIZE, super(sinkReceiver, Constants.TRACE_SUMMARIZATION_DISRUPTOR_SIZE,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment