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 {
private long lastBufferInsert = -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) {
updatedInThisPeriod = true;
setMaxOrderIndex(event);
......@@ -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;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
......@@ -20,6 +21,7 @@ public final class TraceReconstructionFilter extends AbstractFilter implements I
private final long maxTraceTimeout;
private final Map<Long, TraceReconstructionBuffer> traceId2trace = new ConcurrentSkipListMap<Long, TraceReconstructionBuffer>();
private final LinkedList<TraceReconstructionBuffer> freeBufferCache = new LinkedList<TraceReconstructionBuffer>();
public TraceReconstructionFilter(final long maxTraceTimeout,
final ITraceReduction traceReduction) {
......@@ -33,13 +35,15 @@ public final class TraceReconstructionFilter extends AbstractFilter implements I
if (record instanceof AbstractEventRecord) {
final AbstractEventRecord abstractOperationEvent = ((AbstractEventRecord) record);
final long traceId = abstractOperationEvent.getTraceId();
final Long traceId = abstractOperationEvent.getTraceId();
final TraceReconstructionBuffer traceBuffer = getBufferForTraceId(abstractOperationEvent
.getTraceId());
traceBuffer.insertEvent(abstractOperationEvent);
if (traceBuffer.isFinished()) {
traceId2trace.remove(traceId);
traceBuffer.clear();
freeBufferCache.addLast(traceBuffer);
deliver(traceBuffer.toTrace(true));
}
} else if (record instanceof Trace) {
......@@ -64,7 +68,11 @@ public final class TraceReconstructionFilter extends AbstractFilter implements I
private final TraceReconstructionBuffer getBufferForTraceId(final long traceId) {
TraceReconstructionBuffer traceBuffer = traceId2trace.get(traceId);
if (traceBuffer == null) {
if (freeBufferCache.isEmpty()) {
traceBuffer = new TraceReconstructionBuffer();
} else {
traceBuffer = freeBufferCache.removeFirst();
}
traceId2trace.put(traceId, traceBuffer);
}
return traceBuffer;
......@@ -84,6 +92,8 @@ public final class TraceReconstructionFilter extends AbstractFilter implements I
if ((timestamp - traceBuffer.getLastBufferInsert()) <= traceTimeout) {
deliver(traceBuffer.toTrace(false));
traceIdsToRemove.add(entry.getKey());
traceBuffer.clear();
freeBufferCache.addLast(traceBuffer);
}
}
}
......
......@@ -22,6 +22,8 @@ public class TracePatternSummarizationFilter extends AbstractFilter implements I
private final Map<Trace, TracePatternSummarizationBuffer> trace2buffer = new ConcurrentSkipListMap<Trace, TracePatternSummarizationBuffer>(
new TraceComperator());
// TODO cache for buffer objects
public TracePatternSummarizationFilter(final long maxCollectionDuration,
final IPipeReceiver sinkReceiver) {
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