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;
}