diff --git a/deploy/adsabs/server/solr/collection1/conf/solrconfig.xml b/deploy/adsabs/server/solr/collection1/conf/solrconfig.xml index 61bcdbb8c..cd86ce0fe 100644 --- a/deploy/adsabs/server/solr/collection1/conf/solrconfig.xml +++ b/deploy/adsabs/server/solr/collection1/conf/solrconfig.xml @@ -298,6 +298,8 @@ + + json @@ -344,8 +346,12 @@ false 500 + + requestMemoryStart + wordcloud + requestMemoryEnd diff --git a/montysolr/src/main/java/org/adsabs/solr/metrics/memory/RequestMemoryEndComponent.java b/montysolr/src/main/java/org/adsabs/solr/metrics/memory/RequestMemoryEndComponent.java new file mode 100644 index 000000000..c82ef0890 --- /dev/null +++ b/montysolr/src/main/java/org/adsabs/solr/metrics/memory/RequestMemoryEndComponent.java @@ -0,0 +1,33 @@ +package org.adsabs.solr.metrics.memory; + +import com.sun.management.ThreadMXBean; +import org.apache.solr.handler.component.ResponseBuilder; +import org.apache.solr.handler.component.SearchComponent; + +import java.io.IOException; +import java.lang.management.ManagementFactory; + +public class RequestMemoryEndComponent extends SearchComponent { + private static final ThreadMXBean THREAD_MX_BEAN = + (ThreadMXBean) ManagementFactory.getThreadMXBean(); + + @Override + public void prepare(ResponseBuilder rb) throws IOException { + // no-op + } + + @Override + public void process(ResponseBuilder rb) throws IOException { + Long startAlloc = (Long) rb.req.getContext().get(RequestMemoryStartComponent.ALLOC_START_KEY); + if (startAlloc == null) return; + + long allocated = THREAD_MX_BEAN.getCurrentThreadAllocatedBytes() - startAlloc; + rb.rsp.add("allocatedBytes", allocated); + rb.rsp.addHttpHeader("X-Allocated-Bytes", String.valueOf(allocated)); + } + + @Override + public String getDescription() { + return "Reports allocation delta at the end of a request."; + } +} diff --git a/montysolr/src/main/java/org/adsabs/solr/metrics/memory/RequestMemoryStartComponent.java b/montysolr/src/main/java/org/adsabs/solr/metrics/memory/RequestMemoryStartComponent.java new file mode 100644 index 000000000..ae85e0eb3 --- /dev/null +++ b/montysolr/src/main/java/org/adsabs/solr/metrics/memory/RequestMemoryStartComponent.java @@ -0,0 +1,34 @@ +package org.adsabs.solr.metrics.memory; + +import org.apache.solr.handler.component.ResponseBuilder; +import org.apache.solr.handler.component.SearchComponent; + +import java.io.IOException; +import java.lang.management.ManagementFactory; +import com.sun.management.ThreadMXBean; + +public class RequestMemoryStartComponent extends SearchComponent { + static final String ALLOC_START_KEY = "allocation.tracking.start"; + private static final ThreadMXBean THREAD_MX_BEAN = + (ThreadMXBean) ManagementFactory.getThreadMXBean(); + + static { + THREAD_MX_BEAN.setThreadAllocatedMemoryEnabled(true); + } + + @Override + public void prepare(ResponseBuilder rb) throws IOException { + rb.req.getContext().put(ALLOC_START_KEY, + THREAD_MX_BEAN.getCurrentThreadAllocatedBytes()); + } + + @Override + public void process(ResponseBuilder rb) throws IOException { + // no-op + } + + @Override + public String getDescription() { + return "Records allocated bytes at the start of a request."; + } +} diff --git a/montysolr/src/main/java/org/apache/lucene/search/AbstractSecondOrderCollector.java b/montysolr/src/main/java/org/apache/lucene/search/AbstractSecondOrderCollector.java index 3fb83bc11..e5a9bc714 100644 --- a/montysolr/src/main/java/org/apache/lucene/search/AbstractSecondOrderCollector.java +++ b/montysolr/src/main/java/org/apache/lucene/search/AbstractSecondOrderCollector.java @@ -52,7 +52,7 @@ public LeafCollector getLeafCollector(LeafReaderContext context) throws IOExcept public boolean searcherInitialization(IndexSearcher searcher, Weight firstOrderWeight) throws IOException { // this is pretty arbitrary, but 2nd order queries may return many hits... - ((ArrayList) hits).ensureCapacity((int) (searcher.getIndexReader().maxDoc() * ensureCapacityRatio)); + //((ArrayList) hits).ensureCapacity((int) (searcher.getIndexReader().maxDoc() * ensureCapacityRatio)); return true; }