Skip to content

Instantly share code, notes, and snippets.

@jpountz
Created December 23, 2013 16:22
Show Gist options
  • Save jpountz/8099938 to your computer and use it in GitHub Desktop.
Save jpountz/8099938 to your computer and use it in GitHub Desktop.
Patch that gives more detailed ram usage.
Index: lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java
===================================================================
--- lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java (revision 1553093)
+++ lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java (working copy)
@@ -18,8 +18,10 @@
*/
import java.io.IOException;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
+import java.util.List;
import java.util.TreeMap;
import org.apache.lucene.codecs.BlockTermState;
@@ -45,6 +47,7 @@
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.DoubleBarrelLRUCache;
+import org.apache.lucene.util.RamUsage;
/** Handles a terms dict, but decouples all details of
* doc/freqs/positions reading to an instance of {@link
@@ -858,9 +861,7 @@
}
@Override
- public long ramBytesUsed() {
- long sizeInBytes = (postingsReader!=null) ? postingsReader.ramBytesUsed() : 0;
- sizeInBytes += (indexReader!=null) ? indexReader.ramBytesUsed() : 0;
- return sizeInBytes;
+ public RamUsage ramBytesUsed() {
+ return new RamUsage(getClass().getName(), postingsReader.ramBytesUsed(), indexReader.ramBytesUsed());
}
}
Index: lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/FixedGapTermsIndexReader.java
===================================================================
--- lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/FixedGapTermsIndexReader.java (revision 1553093)
+++ lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/FixedGapTermsIndexReader.java (working copy)
@@ -27,10 +27,14 @@
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util.PagedBytes;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.packed.MonotonicBlockPackedReader;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
import java.io.IOException;
import org.apache.lucene.index.IndexFileNames;
@@ -59,7 +63,7 @@
// all fields share this single logical byte[]
private final PagedBytes termBytes = new PagedBytes(PAGED_BYTES_BITS);
- private PagedBytes.Reader termBytesReader;
+ private final PagedBytes.Reader termBytesReader;
final HashMap<FieldInfo,FieldIndexData> fields = new HashMap<FieldInfo,FieldIndexData>();
@@ -279,13 +283,13 @@
}
@Override
- public long ramBytesUsed() {
- long sizeInBytes = ((termBytes!=null) ? termBytes.ramBytesUsed() : 0) +
- ((termBytesReader!=null)? termBytesReader.ramBytesUsed() : 0);
-
- for(FieldIndexData entry : fields.values()) {
- sizeInBytes += entry.ramBytesUsed();
+ public RamUsage ramBytesUsed() {
+ List<RamUsage> details = new ArrayList<RamUsage>();
+ details.add(new RamUsage(termBytes.ramBytesUsed(), "term bytes"));
+ details.add(new RamUsage(termBytesReader.ramBytesUsed(), "term bytes reader"));
+ for (Map.Entry<FieldInfo, FieldIndexData> entry : fields.entrySet()) {
+ details.add(new RamUsage(entry.getValue().ramBytesUsed(), entry.getKey().name));
}
- return sizeInBytes;
+ return new RamUsage(getClass().getName(), details);
}
}
Index: lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/TermsIndexReaderBase.java
===================================================================
--- lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/TermsIndexReaderBase.java (revision 1553093)
+++ lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/TermsIndexReaderBase.java (working copy)
@@ -19,6 +19,7 @@
import org.apache.lucene.index.FieldInfo;
import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.RamUsage;
import java.io.IOException;
import java.io.Closeable;
@@ -72,5 +73,5 @@
}
/** Returns approximate RAM bytes used */
- public abstract long ramBytesUsed();
+ public abstract RamUsage ramBytesUsed();
}
Index: lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/VariableGapTermsIndexReader.java
===================================================================
--- lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/VariableGapTermsIndexReader.java (revision 1553093)
+++ lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/VariableGapTermsIndexReader.java (working copy)
@@ -21,7 +21,10 @@
import java.io.FileOutputStream; // for toDot
import java.io.OutputStreamWriter; // for toDot
import java.io.Writer; // for toDot
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import org.apache.lucene.codecs.CodecUtil;
import org.apache.lucene.index.CorruptIndexException;
@@ -33,6 +36,7 @@
import org.apache.lucene.store.IndexInput;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.fst.BytesRefFSTEnum;
import org.apache.lucene.util.fst.FST;
import org.apache.lucene.util.fst.PositiveIntOutputs;
@@ -198,11 +202,11 @@
}
@Override
- public long ramBytesUsed() {
- long sizeInBytes = 0;
- for(FieldIndexData entry : fields.values()) {
- sizeInBytes += entry.ramBytesUsed();
+ public RamUsage ramBytesUsed() {
+ List<RamUsage> details = new ArrayList<RamUsage>();
+ for (Map.Entry<FieldInfo, FieldIndexData> entry : fields.entrySet()) {
+ details.add(new RamUsage(entry.getValue().ramBytesUsed(), entry.getKey().name));
}
- return sizeInBytes;
+ return new RamUsage(getClass().getName(), details);
}
}
Index: lucene/codecs/src/java/org/apache/lucene/codecs/bloom/BloomFilteringPostingsFormat.java
===================================================================
--- lucene/codecs/src/java/org/apache/lucene/codecs/bloom/BloomFilteringPostingsFormat.java (revision 1553093)
+++ lucene/codecs/src/java/org/apache/lucene/codecs/bloom/BloomFilteringPostingsFormat.java (working copy)
@@ -45,6 +45,7 @@
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.RamUsageEstimator;
import org.apache.lucene.util.automaton.CompiledAutomaton;
@@ -382,13 +383,15 @@
}
@Override
- public long ramBytesUsed() {
- long sizeInBytes = ((delegateFieldsProducer!=null) ? delegateFieldsProducer.ramBytesUsed() : 0);
- for(Map.Entry<String,FuzzySet> entry: bloomsByFieldName.entrySet()) {
- sizeInBytes += entry.getKey().length() * RamUsageEstimator.NUM_BYTES_CHAR;
- sizeInBytes += entry.getValue().ramBytesUsed();
+ public RamUsage ramBytesUsed() {
+ List<RamUsage> details = new ArrayList<RamUsage>();
+ if (delegateFieldsProducer != null) {
+ details.add(delegateFieldsProducer.ramBytesUsed());
}
- return sizeInBytes;
+ for (Map.Entry<String,FuzzySet> entry : bloomsByFieldName.entrySet()) {
+ details.add(new RamUsage(entry.getValue().ramBytesUsed(), "bloom filter for " + entry.getKey()));
+ }
+ return new RamUsage(getClass().getName(), details);
}
}
Index: lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectDocValuesProducer.java
===================================================================
--- lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectDocValuesProducer.java (revision 1553093)
+++ lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectDocValuesProducer.java (working copy)
@@ -18,7 +18,9 @@
*/
import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
@@ -37,6 +39,7 @@
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.FixedBitSet;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.RamUsageEstimator;
/**
@@ -63,7 +66,7 @@
private final Map<Integer,Bits> docsWithFieldInstances = new HashMap<Integer,Bits>();
private final int maxDoc;
- private final AtomicLong ramBytesUsed;
+ private final List<RamUsage> ramUsage;
static final byte NUMBER = 0;
static final byte BYTES = 1;
@@ -78,7 +81,7 @@
String metaName = IndexFileNames.segmentFileName(state.segmentInfo.name, state.segmentSuffix, metaExtension);
// read in the entries from the metadata file.
IndexInput in = state.directory.openInput(metaName, state.context);
- ramBytesUsed = new AtomicLong(RamUsageEstimator.shallowSizeOfInstance(getClass()));
+ ramUsage = new ArrayList<RamUsage>();
boolean success = false;
final int version;
try {
@@ -180,8 +183,8 @@
}
@Override
- public long ramBytesUsed() {
- return ramBytesUsed.get();
+ public synchronized RamUsage ramBytesUsed() {
+ return new RamUsage(getClass().getName(), new ArrayList<RamUsage>(ramUsage));
}
@Override
@@ -189,20 +192,20 @@
NumericDocValues instance = numericInstances.get(field.number);
if (instance == null) {
// Lazy load
- instance = loadNumeric(numerics.get(field.number));
+ instance = loadNumeric(numerics.get(field.number), field);
numericInstances.put(field.number, instance);
}
return instance;
}
- private NumericDocValues loadNumeric(NumericEntry entry) throws IOException {
+ private NumericDocValues loadNumeric(NumericEntry entry, FieldInfo field) throws IOException {
data.seek(entry.offset + entry.missingBytes);
switch (entry.byteWidth) {
case 1:
{
final byte[] values = new byte[entry.count];
data.readBytes(values, 0, entry.count);
- ramBytesUsed.addAndGet(RamUsageEstimator.sizeOf(values));
+ ramUsage.add(new RamUsage(RamUsageEstimator.sizeOf(values), field.name));
return new NumericDocValues() {
@Override
public long get(int idx) {
@@ -217,7 +220,7 @@
for(int i=0;i<entry.count;i++) {
values[i] = data.readShort();
}
- ramBytesUsed.addAndGet(RamUsageEstimator.sizeOf(values));
+ ramUsage.add(new RamUsage(RamUsageEstimator.sizeOf(values), field.name));
return new NumericDocValues() {
@Override
public long get(int idx) {
@@ -232,7 +235,7 @@
for(int i=0;i<entry.count;i++) {
values[i] = data.readInt();
}
- ramBytesUsed.addAndGet(RamUsageEstimator.sizeOf(values));
+ ramUsage.add(new RamUsage(RamUsageEstimator.sizeOf(values), field.name));
return new NumericDocValues() {
@Override
public long get(int idx) {
@@ -247,7 +250,7 @@
for(int i=0;i<entry.count;i++) {
values[i] = data.readLong();
}
- ramBytesUsed.addAndGet(RamUsageEstimator.sizeOf(values));
+ ramUsage.add(new RamUsage(RamUsageEstimator.sizeOf(values), field.name));
return new NumericDocValues() {
@Override
public long get(int idx) {
@@ -266,13 +269,13 @@
BinaryDocValues instance = binaryInstances.get(field.number);
if (instance == null) {
// Lazy load
- instance = loadBinary(binaries.get(field.number));
+ instance = loadBinary(binaries.get(field.number), field);
binaryInstances.put(field.number, instance);
}
return instance;
}
- private BinaryDocValues loadBinary(BinaryEntry entry) throws IOException {
+ private BinaryDocValues loadBinary(BinaryEntry entry, FieldInfo field) throws IOException {
data.seek(entry.offset);
final byte[] bytes = new byte[entry.numBytes];
data.readBytes(bytes, 0, entry.numBytes);
@@ -284,7 +287,7 @@
}
address[entry.count] = data.readInt();
- ramBytesUsed.addAndGet(RamUsageEstimator.sizeOf(bytes) + RamUsageEstimator.sizeOf(address));
+ ramUsage.add(new RamUsage(field.name, new RamUsage(RamUsageEstimator.sizeOf(bytes), "bytes"), new RamUsage(RamUsageEstimator.sizeOf(address), "addresses")));
return new BinaryDocValues() {
@Override
@@ -309,8 +312,8 @@
private SortedDocValues loadSorted(FieldInfo field) throws IOException {
final SortedEntry entry = sorteds.get(field.number);
- final NumericDocValues docToOrd = loadNumeric(entry.docToOrd);
- final BinaryDocValues values = loadBinary(entry.values);
+ final NumericDocValues docToOrd = loadNumeric(entry.docToOrd, field);
+ final BinaryDocValues values = loadBinary(entry.values, field);
return new SortedDocValues() {
@@ -341,7 +344,7 @@
final SortedSetEntry entry = sortedSets.get(field.number);
if (instance == null) {
// Lazy load
- instance = loadSortedSet(entry);
+ instance = loadSortedSet(entry, field);
sortedSetInstances.put(field.number, instance);
}
@@ -385,11 +388,11 @@
};
}
- private SortedSetRawValues loadSortedSet(SortedSetEntry entry) throws IOException {
+ private SortedSetRawValues loadSortedSet(SortedSetEntry entry, FieldInfo field) throws IOException {
SortedSetRawValues instance = new SortedSetRawValues();
- instance.docToOrdAddress = loadNumeric(entry.docToOrdAddress);
- instance.ords = loadNumeric(entry.ords);
- instance.values = loadBinary(entry.values);
+ instance.docToOrdAddress = loadNumeric(entry.docToOrdAddress, field);
+ instance.ords = loadNumeric(entry.ords, field);
+ instance.values = loadBinary(entry.values, field);
return instance;
}
Index: lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java
===================================================================
--- lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java (revision 1553093)
+++ lucene/codecs/src/java/org/apache/lucene/codecs/memory/DirectPostingsFormat.java (working copy)
@@ -18,8 +18,10 @@
*/
import java.io.IOException;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.TreeMap;
@@ -43,6 +45,7 @@
import org.apache.lucene.util.ArrayUtil;
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.RamUsageEstimator;
import org.apache.lucene.util.automaton.CompiledAutomaton;
import org.apache.lucene.util.automaton.RunAutomaton;
@@ -149,13 +152,12 @@
}
@Override
- public long ramBytesUsed() {
- long sizeInBytes = 0;
- for(Map.Entry<String,DirectField> entry: fields.entrySet()) {
- sizeInBytes += entry.getKey().length() * RamUsageEstimator.NUM_BYTES_CHAR;
- sizeInBytes += entry.getValue().ramBytesUsed();
+ public RamUsage ramBytesUsed() {
+ List<RamUsage> details = new ArrayList<RamUsage>();
+ for (Map.Entry<String,DirectField> entry : fields.entrySet()) {
+ details.add(new RamUsage(entry.getValue().ramBytesUsed(), entry.getKey()));
}
- return sizeInBytes;
+ return new RamUsage(getClass().getName(), details);
}
}
Index: lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTOrdTermsReader.java
===================================================================
--- lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTOrdTermsReader.java (revision 1553093)
+++ lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTOrdTermsReader.java (working copy)
@@ -23,6 +23,8 @@
import java.util.BitSet;
import java.util.Collections;
import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
import java.util.TreeMap;
import org.apache.lucene.index.CorruptIndexException;
@@ -45,6 +47,7 @@
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.RamUsageEstimator;
import org.apache.lucene.util.fst.BytesRefFSTEnum;
import org.apache.lucene.util.fst.BytesRefFSTEnum.InputOutput;
@@ -806,17 +809,20 @@
}
@Override
- public long ramBytesUsed() {
- long ramBytesUsed = 0;
- for (TermsReader r : fields.values()) {
+ public RamUsage ramBytesUsed() {
+ List<RamUsage> details = new ArrayList<RamUsage>();
+ for (Map.Entry<String,TermsReader> entry : fields.entrySet()) {
+ final TermsReader r = entry.getValue();
if (r.index != null) {
+ long ramBytesUsed = 0;
ramBytesUsed += r.index.sizeInBytes();
ramBytesUsed += RamUsageEstimator.sizeOf(r.metaBytesBlock);
ramBytesUsed += RamUsageEstimator.sizeOf(r.metaLongsBlock);
ramBytesUsed += RamUsageEstimator.sizeOf(r.skipInfo);
ramBytesUsed += RamUsageEstimator.sizeOf(r.statsBlock);
+ details.add(new RamUsage(ramBytesUsed, entry.getKey()));
}
}
- return ramBytesUsed;
+ return new RamUsage(getClass().getName(), details);
}
}
Index: lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTTermsReader.java
===================================================================
--- lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTTermsReader.java (revision 1553093)
+++ lucene/codecs/src/java/org/apache/lucene/codecs/memory/FSTTermsReader.java (working copy)
@@ -22,6 +22,8 @@
import java.util.BitSet;
import java.util.Collections;
import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
import java.util.TreeMap;
import org.apache.lucene.index.CorruptIndexException;
@@ -44,6 +46,7 @@
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.RamUsageEstimator;
import org.apache.lucene.util.fst.BytesRefFSTEnum;
import org.apache.lucene.util.fst.BytesRefFSTEnum.InputOutput;
@@ -722,11 +725,12 @@
}
@Override
- public long ramBytesUsed() {
- long ramBytesUsed = 0;
- for (TermsReader r : fields.values()) {
- ramBytesUsed += r.dict == null ? 0 : r.dict.sizeInBytes();
+ public RamUsage ramBytesUsed() {
+ List<RamUsage> details = new ArrayList<RamUsage>();
+ for (Map.Entry<String,TermsReader> entry : fields.entrySet()) {
+ final TermsReader r = entry.getValue();
+ details.add(new RamUsage(r.dict.sizeInBytes(), entry.getKey()));
}
- return ramBytesUsed;
+ return new RamUsage(getClass().getName(), details);
}
}
Index: lucene/codecs/src/java/org/apache/lucene/codecs/memory/MemoryDocValuesProducer.java
===================================================================
--- lucene/codecs/src/java/org/apache/lucene/codecs/memory/MemoryDocValuesProducer.java (revision 1553093)
+++ lucene/codecs/src/java/org/apache/lucene/codecs/memory/MemoryDocValuesProducer.java (working copy)
@@ -18,7 +18,9 @@
*/
import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
@@ -44,6 +46,7 @@
import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util.IntsRef;
import org.apache.lucene.util.PagedBytes;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.RamUsageEstimator;
import org.apache.lucene.util.fst.BytesRefFSTEnum;
import org.apache.lucene.util.fst.BytesRefFSTEnum.InputOutput;
@@ -76,7 +79,7 @@
private final Map<Integer,Bits> docsWithFieldInstances = new HashMap<Integer,Bits>();
private final int maxDoc;
- private final AtomicLong ramBytesUsed;
+ private final List<RamUsage> ramUsage;
static final byte NUMBER = 0;
static final byte BYTES = 1;
@@ -108,7 +111,7 @@
binaries = new HashMap<Integer,BinaryEntry>();
fsts = new HashMap<Integer,FSTEntry>();
readFields(in, state.fieldInfos);
- ramBytesUsed = new AtomicLong(RamUsageEstimator.shallowSizeOfInstance(getClass()));
+ ramUsage = new ArrayList<RamUsage>();
success = true;
} finally {
if (success) {
@@ -204,8 +207,8 @@
}
@Override
- public long ramBytesUsed() {
- return ramBytesUsed.get();
+ public synchronized RamUsage ramBytesUsed() {
+ return new RamUsage(getClass().getName(), new ArrayList<RamUsage>(ramUsage));
}
private NumericDocValues loadNumeric(FieldInfo field) throws IOException {
@@ -224,7 +227,9 @@
final int formatID = data.readVInt();
final int bitsPerValue = data.readVInt();
final PackedInts.Reader ordsReader = PackedInts.getReaderNoHeader(data, PackedInts.Format.byId(formatID), entry.packedIntsVersion, maxDoc, bitsPerValue);
- ramBytesUsed.addAndGet(RamUsageEstimator.sizeOf(decode) + ordsReader.ramBytesUsed());
+ ramUsage.add(new RamUsage(field.name,
+ new RamUsage(RamUsageEstimator.sizeOf(decode), "table"),
+ new RamUsage(ordsReader.ramBytesUsed(), "ords ")));
return new NumericDocValues() {
@Override
public long get(int docID) {
@@ -234,12 +239,14 @@
case DELTA_COMPRESSED:
final int blockSize = data.readVInt();
final BlockPackedReader reader = new BlockPackedReader(data, entry.packedIntsVersion, blockSize, maxDoc, false);
- ramBytesUsed.addAndGet(reader.ramBytesUsed());
+ ramUsage.add(new RamUsage(field.name,
+ new RamUsage(reader.ramBytesUsed(), "values (delta-compressed)")));
return reader;
case UNCOMPRESSED:
final byte bytes[] = new byte[maxDoc];
data.readBytes(bytes, 0, bytes.length);
- ramBytesUsed.addAndGet(RamUsageEstimator.sizeOf(bytes));
+ ramUsage.add(new RamUsage(field.name,
+ new RamUsage(RamUsageEstimator.sizeOf(bytes), "values (uncompressed)")));
return new NumericDocValues() {
@Override
public long get(int docID) {
@@ -251,7 +258,8 @@
final long mult = data.readLong();
final int quotientBlockSize = data.readVInt();
final BlockPackedReader quotientReader = new BlockPackedReader(data, entry.packedIntsVersion, quotientBlockSize, maxDoc, false);
- ramBytesUsed.addAndGet(quotientReader.ramBytesUsed());
+ ramUsage.add(new RamUsage(field.name,
+ new RamUsage(quotientReader.ramBytesUsed(), "quotients (gcd compression)")));
return new NumericDocValues() {
@Override
public long get(int docID) {
@@ -281,7 +289,9 @@
final PagedBytes.Reader bytesReader = bytes.freeze(true);
if (entry.minLength == entry.maxLength) {
final int fixedLength = entry.minLength;
- ramBytesUsed.addAndGet(bytes.ramBytesUsed());
+ ramUsage.add(new RamUsage(field.name,
+ new RamUsage(bytes.ramBytesUsed(), "term bytes"),
+ new RamUsage(bytesReader.ramBytesUsed(), "term bytes reader")));
return new BinaryDocValues() {
@Override
public void get(int docID, BytesRef result) {
@@ -291,7 +301,10 @@
} else {
data.seek(data.getFilePointer() + entry.missingBytes);
final MonotonicBlockPackedReader addresses = new MonotonicBlockPackedReader(data, entry.packedIntsVersion, entry.blockSize, maxDoc, false);
- ramBytesUsed.addAndGet(bytes.ramBytesUsed() + addresses.ramBytesUsed());
+ ramUsage.add(new RamUsage(field.name,
+ new RamUsage(bytes.ramBytesUsed(), "term bytes"),
+ new RamUsage(bytesReader.ramBytesUsed(), "term bytes reader"),
+ new RamUsage(addresses.ramBytesUsed(), "addresses")));
return new BinaryDocValues() {
@Override
public void get(int docID, BytesRef result) {
@@ -315,7 +328,7 @@
if (instance == null) {
data.seek(entry.offset);
instance = new FST<Long>(data, PositiveIntOutputs.getSingleton());
- ramBytesUsed.addAndGet(instance.sizeInBytes());
+ ramUsage.add(new RamUsage(field.name, new RamUsage(instance.sizeInBytes(), "terms index (fst)")));
fstInstances.put(field.number, instance);
}
}
@@ -390,7 +403,7 @@
if (instance == null) {
data.seek(entry.offset);
instance = new FST<Long>(data, PositiveIntOutputs.getSingleton());
- ramBytesUsed.addAndGet(instance.sizeInBytes());
+ ramUsage.add(new RamUsage(field.name, new RamUsage(instance.sizeInBytes(), "terms index (fst)")));
fstInstances.put(field.number, instance);
}
}
Index: lucene/codecs/src/java/org/apache/lucene/codecs/memory/MemoryPostingsFormat.java
===================================================================
--- lucene/codecs/src/java/org/apache/lucene/codecs/memory/MemoryPostingsFormat.java (revision 1553093)
+++ lucene/codecs/src/java/org/apache/lucene/codecs/memory/MemoryPostingsFormat.java (working copy)
@@ -19,8 +19,10 @@
import java.io.Closeable;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
@@ -51,6 +53,7 @@
import org.apache.lucene.util.FixedBitSet;
import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util.IntsRef;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.RamUsageEstimator;
import org.apache.lucene.util.fst.Builder;
import org.apache.lucene.util.fst.ByteSequenceOutputs;
@@ -943,8 +946,8 @@
return field.hasPayloads();
}
- public long ramBytesUsed() {
- return ((fst!=null) ? fst.sizeInBytes() : 0);
+ public RamUsage ramBytesUsed() {
+ return new RamUsage(fst.sizeInBytes(), "fst");
}
}
@@ -994,13 +997,12 @@
}
@Override
- public long ramBytesUsed() {
- long sizeInBytes = 0;
+ public RamUsage ramBytesUsed() {
+ List<RamUsage> details = new ArrayList<RamUsage>();
for(Map.Entry<String,TermsReader> entry: fields.entrySet()) {
- sizeInBytes += (entry.getKey().length() * RamUsageEstimator.NUM_BYTES_CHAR);
- sizeInBytes += entry.getValue().ramBytesUsed();
+ details.add(new RamUsage(entry.getKey(), entry.getValue().ramBytesUsed()));
}
- return sizeInBytes;
+ return new RamUsage(getClass().getName(), details);
}
};
}
Index: lucene/codecs/src/java/org/apache/lucene/codecs/pulsing/PulsingPostingsReader.java
===================================================================
--- lucene/codecs/src/java/org/apache/lucene/codecs/pulsing/PulsingPostingsReader.java (revision 1553093)
+++ lucene/codecs/src/java/org/apache/lucene/codecs/pulsing/PulsingPostingsReader.java (working copy)
@@ -42,6 +42,7 @@
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
/** Concrete class that reads the current doc/freq/skip
* postings format
@@ -650,7 +651,7 @@
}
@Override
- public long ramBytesUsed() {
- return ((wrappedPostingsReader!=null) ? wrappedPostingsReader.ramBytesUsed(): 0);
+ public RamUsage ramBytesUsed() {
+ return new RamUsage(getClass().getName(), wrappedPostingsReader.ramBytesUsed());
}
}
Index: lucene/codecs/src/java/org/apache/lucene/codecs/sep/SepPostingsReader.java
===================================================================
--- lucene/codecs/src/java/org/apache/lucene/codecs/sep/SepPostingsReader.java (revision 1553093)
+++ lucene/codecs/src/java/org/apache/lucene/codecs/sep/SepPostingsReader.java (working copy)
@@ -39,6 +39,7 @@
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
/** Concrete class that reads the current doc/freq/skip
* postings format.
@@ -703,7 +704,7 @@
}
@Override
- public long ramBytesUsed() {
- return 0;
+ public RamUsage ramBytesUsed() {
+ return RamUsage.noRamUsage(this);
}
}
Index: lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextDocValuesReader.java
===================================================================
--- lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextDocValuesReader.java (revision 1553093)
+++ lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextDocValuesReader.java (working copy)
@@ -50,6 +50,7 @@
import org.apache.lucene.store.IndexInput;
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.StringHelper;
class SimpleTextDocValuesReader extends DocValuesProducer {
@@ -464,7 +465,7 @@
}
@Override
- public long ramBytesUsed() {
- return 0;
+ public RamUsage ramBytesUsed() {
+ return RamUsage.noRamUsage(this);
}
}
Index: lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextFieldsReader.java
===================================================================
--- lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextFieldsReader.java (revision 1553093)
+++ lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextFieldsReader.java (working copy)
@@ -18,9 +18,11 @@
*/
import java.io.IOException;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.TreeMap;
@@ -41,6 +43,7 @@
import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util.IntsRef;
import org.apache.lucene.util.OpenBitSet;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.StringHelper;
import org.apache.lucene.util.UnicodeUtil;
import org.apache.lucene.util.fst.Builder;
@@ -571,7 +574,7 @@
/** Returns approximate RAM bytes used */
public long ramBytesUsed() {
- return (fst!=null) ? fst.sizeInBytes() : 0;
+ return fst.sizeInBytes();
}
@Override
@@ -657,11 +660,11 @@
}
@Override
- public long ramBytesUsed() {
- long sizeInBytes = 0;
- for(SimpleTextTerms simpleTextTerms : termsCache.values()) {
- sizeInBytes += (simpleTextTerms!=null) ? simpleTextTerms.ramBytesUsed() : 0;
+ public RamUsage ramBytesUsed() {
+ List<RamUsage> details = new ArrayList<RamUsage>();
+ for (Map.Entry<String, SimpleTextTerms> entry : termsCache.entrySet()) {
+ details.add(new RamUsage(entry.getValue().ramBytesUsed(), entry.getKey()));
}
- return sizeInBytes;
+ return new RamUsage(getClass().getName(), details);
}
}
Index: lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextStoredFieldsReader.java
===================================================================
--- lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextStoredFieldsReader.java (revision 1553093)
+++ lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextStoredFieldsReader.java (working copy)
@@ -33,6 +33,7 @@
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.CharsRef;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.StringHelper;
import org.apache.lucene.util.UnicodeUtil;
@@ -194,7 +195,7 @@
}
@Override
- public long ramBytesUsed() {
- return 0;
+ public RamUsage ramBytesUsed() {
+ return RamUsage.noRamUsage(this);
}
}
Index: lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java
===================================================================
--- lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java (revision 1553093)
+++ lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextTermVectorsReader.java (working copy)
@@ -41,8 +41,10 @@
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.CharsRef;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.StringHelper;
import org.apache.lucene.util.UnicodeUtil;
+
import static org.apache.lucene.codecs.simpletext.SimpleTextTermVectorsWriter.*;
/**
@@ -534,7 +536,7 @@
}
@Override
- public long ramBytesUsed() {
- return 0;
+ public RamUsage ramBytesUsed() {
+ return RamUsage.noRamUsage(this);
}
}
Index: lucene/core/src/java/org/apache/lucene/codecs/BlockTreeTermsReader.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/BlockTreeTermsReader.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/codecs/BlockTreeTermsReader.java (working copy)
@@ -21,9 +21,12 @@
import java.io.IOException;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
+import java.util.List;
import java.util.Locale;
+import java.util.Map;
import java.util.TreeMap;
import org.apache.lucene.index.CorruptIndexException;
@@ -45,6 +48,7 @@
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.RamUsageEstimator;
import org.apache.lucene.util.StringHelper;
import org.apache.lucene.util.automaton.CompiledAutomaton;
@@ -550,8 +554,8 @@
}
/** Returns approximate RAM bytes used */
- public long ramBytesUsed() {
- return ((index!=null)? index.sizeInBytes() : 0);
+ public RamUsage ramBytesUsed() {
+ return new RamUsage(index.sizeInBytes(), "terms index (fst)");
}
// NOTE: cannot seek!
@@ -2970,11 +2974,12 @@
}
@Override
- public long ramBytesUsed() {
- long sizeInByes = ((postingsReader!=null) ? postingsReader.ramBytesUsed() : 0);
- for(FieldReader reader : fields.values()) {
- sizeInByes += reader.ramBytesUsed();
+ public RamUsage ramBytesUsed() {
+ List<RamUsage> details = new ArrayList<RamUsage>();
+ details.add(postingsReader.ramBytesUsed());
+ for (Map.Entry<String, FieldReader> entry : fields.entrySet()) {
+ details.add(new RamUsage(entry.getKey(), entry.getValue().ramBytesUsed()));
}
- return sizeInByes;
+ return new RamUsage(getClass().getName(), details);
}
}
Index: lucene/core/src/java/org/apache/lucene/codecs/DocValuesProducer.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/DocValuesProducer.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/codecs/DocValuesProducer.java (working copy)
@@ -26,6 +26,7 @@
import org.apache.lucene.index.SortedDocValues;
import org.apache.lucene.index.SortedSetDocValues;
import org.apache.lucene.util.Bits;
+import org.apache.lucene.util.RamUsage;
/** Abstract API that produces numeric, binary and
* sorted docvalues.
@@ -65,7 +66,7 @@
public abstract Bits getDocsWithField(FieldInfo field) throws IOException;
/** Returns approximate RAM bytes used */
- public abstract long ramBytesUsed();
+ public abstract RamUsage ramBytesUsed();
/**
* A simple implementation of {@link DocValuesProducer#getDocsWithField} that
Index: lucene/core/src/java/org/apache/lucene/codecs/FieldsProducer.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/FieldsProducer.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/codecs/FieldsProducer.java (working copy)
@@ -21,6 +21,7 @@
import java.io.IOException;
import org.apache.lucene.index.Fields;
+import org.apache.lucene.util.RamUsage;
/** Abstract API that produces terms, doc, freq, prox, offset and
* payloads postings.
@@ -38,5 +39,5 @@
public abstract void close() throws IOException;
/** Returns approximate RAM bytes used */
- public abstract long ramBytesUsed();
+ public abstract RamUsage ramBytesUsed();
}
Index: lucene/core/src/java/org/apache/lucene/codecs/PostingsReaderBase.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/PostingsReaderBase.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/codecs/PostingsReaderBase.java (working copy)
@@ -26,6 +26,7 @@
import org.apache.lucene.store.IndexInput;
import org.apache.lucene.store.DataInput;
import org.apache.lucene.util.Bits;
+import org.apache.lucene.util.RamUsage;
/** The core terms dictionaries (BlockTermsReader,
* BlockTreeTermsReader) interact with a single instance
@@ -70,7 +71,7 @@
int flags) throws IOException;
/** Returns approximate RAM bytes used */
- public abstract long ramBytesUsed();
+ public abstract RamUsage ramBytesUsed();
@Override
public abstract void close() throws IOException;
Index: lucene/core/src/java/org/apache/lucene/codecs/StoredFieldsReader.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/StoredFieldsReader.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/codecs/StoredFieldsReader.java (working copy)
@@ -20,6 +20,7 @@
import java.io.IOException;
import org.apache.lucene.index.StoredFieldVisitor;
+import org.apache.lucene.util.RamUsage;
/**
* Codec API for reading stored fields.
@@ -42,5 +43,5 @@
public abstract StoredFieldsReader clone();
/** Returns approximate RAM bytes used */
- public abstract long ramBytesUsed();
+ public abstract RamUsage ramBytesUsed();
}
Index: lucene/core/src/java/org/apache/lucene/codecs/TermVectorsReader.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/TermVectorsReader.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/codecs/TermVectorsReader.java (working copy)
@@ -23,6 +23,7 @@
import org.apache.lucene.analysis.tokenattributes.OffsetAttribute; // javadocs
import org.apache.lucene.index.DocsAndPositionsEnum; // javadocs
import org.apache.lucene.index.Fields;
+import org.apache.lucene.util.RamUsage;
/**
* Codec API for reading term vectors:
@@ -43,7 +44,7 @@
public abstract Fields get(int doc) throws IOException;
/** Returns approximate RAM bytes used */
- public abstract long ramBytesUsed();
+ public abstract RamUsage ramBytesUsed();
/** Create a clone that one caller at a time may use to
* read term vectors. */
Index: lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingStoredFieldsReader.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingStoredFieldsReader.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingStoredFieldsReader.java (working copy)
@@ -55,6 +55,7 @@
import org.apache.lucene.util.ArrayUtil;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.packed.PackedInts;
/**
@@ -502,8 +503,8 @@
}
@Override
- public long ramBytesUsed() {
- return indexReader.ramBytesUsed();
+ public RamUsage ramBytesUsed() {
+ return new RamUsage(getClass().getName(), new RamUsage(indexReader.ramBytesUsed(), "doc index"));
}
}
Index: lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java (working copy)
@@ -56,6 +56,7 @@
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util.LongsRef;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.packed.BlockPackedReaderIterator;
import org.apache.lucene.util.packed.PackedInts;
@@ -1036,8 +1037,8 @@
}
@Override
- public long ramBytesUsed() {
- return indexReader.ramBytesUsed();
+ public RamUsage ramBytesUsed() {
+ return new RamUsage(getClass().getName(), new RamUsage(indexReader.ramBytesUsed(), "doc index"));
}
}
Index: lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40DocValuesReader.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40DocValuesReader.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40DocValuesReader.java (working copy)
@@ -40,6 +40,7 @@
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util.PagedBytes;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.RamUsageEstimator;
import org.apache.lucene.util.packed.PackedInts;
@@ -651,7 +652,7 @@
}
@Override
- public long ramBytesUsed() {
- return ramBytesUsed.get();
+ public RamUsage ramBytesUsed() {
+ return new RamUsage(ramBytesUsed.get(), getClass().getName());
}
}
Index: lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsReader.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsReader.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40PostingsReader.java (working copy)
@@ -40,6 +40,7 @@
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
/**
* Concrete class that reads the 4.0 frq/prox
@@ -1164,8 +1165,8 @@
}
@Override
- public long ramBytesUsed() {
- return 0;
+ public RamUsage ramBytesUsed() {
+ return RamUsage.noRamUsage(this);
}
}
Index: lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40StoredFieldsReader.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40StoredFieldsReader.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40StoredFieldsReader.java (working copy)
@@ -32,6 +32,7 @@
import org.apache.lucene.store.IOContext;
import org.apache.lucene.store.IndexInput;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
import java.io.Closeable;
@@ -246,7 +247,7 @@
}
@Override
- public long ramBytesUsed() {
- return 0;
+ public RamUsage ramBytesUsed() {
+ return RamUsage.noRamUsage(this);
}
}
Index: lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsReader.java (working copy)
@@ -42,6 +42,8 @@
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
+import org.apache.lucene.util.RamUsageEstimator;
/**
* Lucene 4.0 Term Vectors reader.
@@ -757,8 +759,8 @@
}
@Override
- public long ramBytesUsed() {
- return 0;
+ public RamUsage ramBytesUsed() {
+ return RamUsage.noRamUsage(this);
}
}
Index: lucene/core/src/java/org/apache/lucene/codecs/lucene41/Lucene41PostingsReader.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/lucene41/Lucene41PostingsReader.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/codecs/lucene41/Lucene41PostingsReader.java (working copy)
@@ -44,6 +44,7 @@
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
/**
* Concrete class that reads docId(maybe frq,pos,offset,payloads) list
@@ -1543,8 +1544,8 @@
}
@Override
- public long ramBytesUsed() {
- return 0;
+ public RamUsage ramBytesUsed() {
+ return RamUsage.noRamUsage(this);
}
}
Index: lucene/core/src/java/org/apache/lucene/codecs/lucene42/Lucene42DocValuesProducer.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/lucene42/Lucene42DocValuesProducer.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/codecs/lucene42/Lucene42DocValuesProducer.java (working copy)
@@ -18,7 +18,9 @@
*/
import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
@@ -43,6 +45,7 @@
import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util.IntsRef;
import org.apache.lucene.util.PagedBytes;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.RamUsageEstimator;
import org.apache.lucene.util.fst.BytesRefFSTEnum;
import org.apache.lucene.util.fst.BytesRefFSTEnum.InputOutput;
@@ -74,7 +77,7 @@
new HashMap<Integer,FST<Long>>();
private final int maxDoc;
- private final AtomicLong ramBytesUsed;
+ private final List<RamUsage> ramUsage;
static final byte NUMBER = 0;
static final byte BYTES = 1;
@@ -97,7 +100,7 @@
// read in the entries from the metadata file.
IndexInput in = state.directory.openInput(metaName, state.context);
boolean success = false;
- ramBytesUsed = new AtomicLong(RamUsageEstimator.shallowSizeOfInstance(getClass()));
+ ramUsage = new ArrayList<RamUsage>();
final int version;
try {
version = CodecUtil.checkHeader(in, metaCodec,
@@ -191,8 +194,8 @@
}
@Override
- public long ramBytesUsed() {
- return ramBytesUsed.get();
+ public synchronized RamUsage ramBytesUsed() {
+ return new RamUsage(getClass().getName(), new ArrayList<RamUsage>(ramUsage));
}
private NumericDocValues loadNumeric(FieldInfo field) throws IOException {
@@ -211,7 +214,9 @@
final int formatID = data.readVInt();
final int bitsPerValue = data.readVInt();
final PackedInts.Reader ordsReader = PackedInts.getReaderNoHeader(data, PackedInts.Format.byId(formatID), entry.packedIntsVersion, maxDoc, bitsPerValue);
- ramBytesUsed.addAndGet(RamUsageEstimator.sizeOf(decode) + ordsReader.ramBytesUsed());
+ ramUsage.add(new RamUsage(field.name,
+ new RamUsage(RamUsageEstimator.sizeOf(decode), "table"),
+ new RamUsage(ordsReader.ramBytesUsed(), "ords ")));
return new NumericDocValues() {
@Override
public long get(int docID) {
@@ -221,12 +226,14 @@
case DELTA_COMPRESSED:
final int blockSize = data.readVInt();
final BlockPackedReader reader = new BlockPackedReader(data, entry.packedIntsVersion, blockSize, maxDoc, false);
- ramBytesUsed.addAndGet(reader.ramBytesUsed());
+ ramUsage.add(new RamUsage(field.name,
+ new RamUsage(reader.ramBytesUsed(), "values (delta-compressed)")));
return reader;
case UNCOMPRESSED:
final byte bytes[] = new byte[maxDoc];
data.readBytes(bytes, 0, bytes.length);
- ramBytesUsed.addAndGet(RamUsageEstimator.sizeOf(bytes));
+ ramUsage.add(new RamUsage(field.name,
+ new RamUsage(RamUsageEstimator.sizeOf(bytes), "values (uncompressed)")));
return new NumericDocValues() {
@Override
public long get(int docID) {
@@ -238,7 +245,8 @@
final long mult = data.readLong();
final int quotientBlockSize = data.readVInt();
final BlockPackedReader quotientReader = new BlockPackedReader(data, entry.packedIntsVersion, quotientBlockSize, maxDoc, false);
- ramBytesUsed.addAndGet(quotientReader.ramBytesUsed());
+ ramUsage.add(new RamUsage(field.name,
+ new RamUsage(quotientReader.ramBytesUsed(), "quotients (gcd compression)")));
return new NumericDocValues() {
@Override
public long get(int docID) {
@@ -268,7 +276,9 @@
final PagedBytes.Reader bytesReader = bytes.freeze(true);
if (entry.minLength == entry.maxLength) {
final int fixedLength = entry.minLength;
- ramBytesUsed.addAndGet(bytes.ramBytesUsed());
+ ramUsage.add(new RamUsage(field.name,
+ new RamUsage(bytes.ramBytesUsed(), "term bytes"),
+ new RamUsage(bytesReader.ramBytesUsed(), "term bytes reader")));
return new BinaryDocValues() {
@Override
public void get(int docID, BytesRef result) {
@@ -277,7 +287,10 @@
};
} else {
final MonotonicBlockPackedReader addresses = new MonotonicBlockPackedReader(data, entry.packedIntsVersion, entry.blockSize, maxDoc, false);
- ramBytesUsed.addAndGet(bytes.ramBytesUsed() + addresses.ramBytesUsed());
+ ramUsage.add(new RamUsage(field.name,
+ new RamUsage(bytes.ramBytesUsed(), "term bytes"),
+ new RamUsage(bytesReader.ramBytesUsed(), "term bytes reader"),
+ new RamUsage(addresses.ramBytesUsed(), "addresses")));
return new BinaryDocValues() {
@Override
public void get(int docID, BytesRef result) {
@@ -298,7 +311,7 @@
if (instance == null) {
data.seek(entry.offset);
instance = new FST<Long>(data, PositiveIntOutputs.getSingleton());
- ramBytesUsed.addAndGet(instance.sizeInBytes());
+ ramUsage.add(new RamUsage(field.name, new RamUsage(instance.sizeInBytes(), "terms index (fst)")));
fstInstances.put(field.number, instance);
}
}
@@ -373,7 +386,7 @@
if (instance == null) {
data.seek(entry.offset);
instance = new FST<Long>(data, PositiveIntOutputs.getSingleton());
- ramBytesUsed.addAndGet(instance.sizeInBytes());
+ ramUsage.add(new RamUsage(field.name, new RamUsage(instance.sizeInBytes(), "terms index (fst)")));
fstInstances.put(field.number, instance);
}
}
Index: lucene/core/src/java/org/apache/lucene/codecs/lucene45/Lucene45DocValuesProducer.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/lucene45/Lucene45DocValuesProducer.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/codecs/lucene45/Lucene45DocValuesProducer.java (working copy)
@@ -29,7 +29,10 @@
import java.io.Closeable; // javadocs
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.apache.lucene.codecs.CodecUtil;
@@ -53,6 +56,7 @@
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IOUtils;
import org.apache.lucene.util.LongValues;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.packed.BlockPackedReader;
import org.apache.lucene.util.packed.MonotonicBlockPackedReader;
import org.apache.lucene.util.packed.PackedInts;
@@ -67,6 +71,7 @@
private final IndexInput data;
private final int maxDoc;
private final int version;
+ private final List<RamUsage> ramUsage;
// memory-resident structures
private final Map<Integer,MonotonicBlockPackedReader> addressInstances = new HashMap<Integer,MonotonicBlockPackedReader>();
@@ -78,6 +83,7 @@
// read in the entries from the metadata file.
IndexInput in = state.directory.openInput(metaName, state.context);
this.maxDoc = state.segmentInfo.getDocCount();
+ ramUsage = Collections.synchronizedList(new ArrayList<RamUsage>());
boolean success = false;
try {
version = CodecUtil.checkHeader(in, metaCodec,
@@ -285,15 +291,8 @@
}
@Override
- public long ramBytesUsed() {
- long sizeInBytes = 0;
- for(MonotonicBlockPackedReader monotonicBlockPackedReader: addressInstances.values()) {
- sizeInBytes += Integer.SIZE + monotonicBlockPackedReader.ramBytesUsed();
- }
- for(MonotonicBlockPackedReader monotonicBlockPackedReader: ordIndexInstances.values()) {
- sizeInBytes += Integer.SIZE + monotonicBlockPackedReader.ramBytesUsed();
- }
- return sizeInBytes;
+ public RamUsage ramBytesUsed() {
+ return new RamUsage(getClass().getName(), new ArrayList<RamUsage>(ramUsage));
}
LongValues getNumeric(NumericEntry entry) throws IOException {
@@ -376,6 +375,8 @@
if (addrInstance == null) {
data.seek(bytes.addressesOffset);
addrInstance = new MonotonicBlockPackedReader(data, bytes.packedIntsVersion, bytes.blockSize, bytes.count, false);
+ ramUsage.add(new RamUsage(field.name,
+ new RamUsage(addrInstance.ramBytesUsed(), "addresses")));
addressInstances.put(field.number, addrInstance);
}
addresses = addrInstance;
@@ -497,6 +498,8 @@
if (ordIndexInstance == null) {
data.seek(entry.offset);
ordIndexInstance = new MonotonicBlockPackedReader(data, entry.packedIntsVersion, entry.blockSize, entry.count, false);
+ ramUsage.add(new RamUsage(field.name,
+ new RamUsage(ordIndexInstance.ramBytesUsed(), "ords")));
ordIndexInstances.put(field.number, ordIndexInstance);
}
ordIndex = ordIndexInstance;
Index: lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldDocValuesFormat.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldDocValuesFormat.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldDocValuesFormat.java (working copy)
@@ -19,8 +19,10 @@
import java.io.Closeable;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.IdentityHashMap;
+import java.util.List;
import java.util.Map;
import java.util.ServiceLoader;
import java.util.TreeMap;
@@ -39,6 +41,7 @@
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.RamUsageEstimator;
/**
@@ -302,13 +305,12 @@
}
@Override
- public long ramBytesUsed() {
- long size = 0;
- for (Map.Entry<String,DocValuesProducer> entry : formats.entrySet()) {
- size += (entry.getKey().length() * RamUsageEstimator.NUM_BYTES_CHAR) +
- entry.getValue().ramBytesUsed();
+ public RamUsage ramBytesUsed() {
+ List<RamUsage> details = new ArrayList<RamUsage>();
+ for (DocValuesProducer producer : formats.values()) {
+ details.add(producer.ramBytesUsed());
}
- return size;
+ return new RamUsage(getClass().getName(), details);
}
}
Index: lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldPostingsFormat.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldPostingsFormat.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/codecs/perfield/PerFieldPostingsFormat.java (working copy)
@@ -18,15 +18,18 @@
*/
import java.io.IOException;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.ServiceLoader; // javadocs
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
+import org.apache.lucene.codecs.DocValuesProducer;
import org.apache.lucene.codecs.FieldsConsumer;
import org.apache.lucene.codecs.FieldsProducer;
import org.apache.lucene.codecs.PostingsFormat;
@@ -36,6 +39,7 @@
import org.apache.lucene.index.SegmentWriteState;
import org.apache.lucene.index.Terms;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.RamUsageEstimator;
import static org.apache.lucene.index.FilterAtomicReader.FilterFields;
@@ -238,13 +242,12 @@
}
@Override
- public long ramBytesUsed() {
- long sizeInBytes = 0;
- for(Map.Entry<String,FieldsProducer> entry: formats.entrySet()) {
- sizeInBytes += entry.getKey().length() * RamUsageEstimator.NUM_BYTES_CHAR;
- sizeInBytes += entry.getValue().ramBytesUsed();
+ public RamUsage ramBytesUsed() {
+ List<RamUsage> details = new ArrayList<RamUsage>();
+ for (FieldsProducer producer : formats.values()) {
+ details.add(producer.ramBytesUsed());
}
- return sizeInBytes;
+ return new RamUsage(getClass().getName(), details);
}
}
Index: lucene/core/src/java/org/apache/lucene/index/SegmentCoreReaders.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/index/SegmentCoreReaders.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/index/SegmentCoreReaders.java (working copy)
@@ -21,6 +21,7 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
@@ -38,6 +39,7 @@
import org.apache.lucene.store.IOContext;
import org.apache.lucene.util.CloseableThreadLocal;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
/** Holds core readers that are shared (unchanged) when
* SegmentReader is cloned or reopened */
@@ -191,10 +193,18 @@
}
/** Returns approximate RAM bytes used */
- public long ramBytesUsed() {
- return ((normsProducer!=null) ? normsProducer.ramBytesUsed() : 0) +
- ((fields!=null) ? fields.ramBytesUsed() : 0) +
- ((fieldsReaderOrig!=null)? fieldsReaderOrig.ramBytesUsed() : 0) +
- ((termVectorsReaderOrig!=null) ? termVectorsReaderOrig.ramBytesUsed() : 0);
+ public void ramBytesUsed(List<RamUsage> details) {
+ if (normsProducer != null) {
+ details.add(new RamUsage("norms", normsProducer.ramBytesUsed()));
+ }
+ if (fields != null) {
+ details.add(new RamUsage("fields", fields.ramBytesUsed()));
+ }
+ if (fieldsReaderOrig != null) {
+ details.add(new RamUsage("stored fields", fieldsReaderOrig.ramBytesUsed()));
+ }
+ if (termVectorsReaderOrig != null) {
+ details.add(new RamUsage("term vectors", termVectorsReaderOrig.ramBytesUsed()));
+ }
}
}
Index: lucene/core/src/java/org/apache/lucene/index/SegmentDocValues.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/index/SegmentDocValues.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/index/SegmentDocValues.java (working copy)
@@ -1,6 +1,7 @@
package org.apache.lucene.index;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -10,6 +11,7 @@
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.IOContext;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.RefCount;
/*
@@ -97,12 +99,12 @@
}
/** Returns approximate RAM bytes used. */
- synchronized long ramBytesUsed() {
- long ramBytesUsed = 0;
+ synchronized RamUsage ramBytesUsed() {
+ List<RamUsage> details = new ArrayList<RamUsage>();
for (RefCount<DocValuesProducer> dvp : genDVProducers.values()) {
- ramBytesUsed += dvp.get().ramBytesUsed();
+ details.add(dvp.get().ramBytesUsed());
}
- return ramBytesUsed;
+ return new RamUsage("doc values", details);
}
}
Index: lucene/core/src/java/org/apache/lucene/index/SegmentReader.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/index/SegmentReader.java (revision 1553093)
+++ lucene/core/src/java/org/apache/lucene/index/SegmentReader.java (working copy)
@@ -36,6 +36,7 @@
import org.apache.lucene.store.IOContext;
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.CloseableThreadLocal;
+import org.apache.lucene.util.RamUsage;
/**
* IndexReader implementation over a single segment.
@@ -542,15 +543,15 @@
}
/** Returns approximate RAM Bytes used */
- public long ramBytesUsed() {
+ public RamUsage ramBytesUsed() {
ensureOpen();
- long ramBytesUsed = 0;
+ final List<RamUsage> details = new ArrayList<RamUsage>();
if (segDocValues != null) {
- ramBytesUsed += segDocValues.ramBytesUsed();
+ details.add(segDocValues.ramBytesUsed());
}
if (core != null) {
- ramBytesUsed += core.ramBytesUsed();
+ core.ramBytesUsed(details);
}
- return ramBytesUsed;
+ return new RamUsage(toString(), details);
}
}
Index: lucene/core/src/java/org/apache/lucene/util/RamUsage.java
===================================================================
--- lucene/core/src/java/org/apache/lucene/util/RamUsage.java (revision 0)
+++ lucene/core/src/java/org/apache/lucene/util/RamUsage.java (working copy)
@@ -0,0 +1,88 @@
+package org.apache.lucene.util;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.Arrays;
+import java.util.List;
+
+/** Description of the RAM usage of an object. */
+public class RamUsage {
+
+ /** {@link RamUsage} description for an object that reads everyting from disk. */
+ public static RamUsage noRamUsage(Object o) {
+ return new RamUsage(RamUsageEstimator.shallowSizeOf(o), o.getClass().getName());
+ }
+
+ private static long totalMemory(List<RamUsage> details) {
+ long sum = 0;
+ for (RamUsage usage : details) {
+ sum += usage.bytes;
+ }
+ return sum;
+ }
+
+ /** Number of bytes used. */
+ public final long bytes;
+
+ public final String description;
+
+ /** Details about the RAM usage. */
+ public final List<RamUsage> details;
+
+ /** Constructor. */
+ public RamUsage(long bytes, String description, List<RamUsage> details) {
+ this.bytes = bytes;
+ this.description = description;
+ this.details = details;
+ }
+
+ /** Constructor that sums up contributions. */
+ public RamUsage(String description, List<RamUsage> details) {
+ this(totalMemory(details), description, details);
+ }
+
+ /** Constructor. */
+ public RamUsage(long bytes, String description, RamUsage... details) {
+ this(bytes, description, Arrays.asList(details));
+ }
+
+ /** Constructor that sums up contributions. */
+ public RamUsage(String description, RamUsage... details) {
+ this(description, Arrays.asList(details));
+ }
+
+ private final void toString(int depth, StringBuilder buffer) {
+ for (int i = 0; i < depth; i++) {
+ buffer.append(" ");
+ }
+ buffer.append(RamUsageEstimator.humanReadableUnits(bytes)).append(": ").append(description);
+ buffer.append("\n");
+
+ for (RamUsage detail : details) {
+ detail.toString(depth + 1, buffer);
+ }
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder buffer = new StringBuilder();
+ toString(0, buffer);
+ return buffer.toString();
+ }
+
+}
Property changes on: lucene/core/src/java/org/apache/lucene/util/RamUsage.java
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Index: lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingDocValuesFormat.java
===================================================================
--- lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingDocValuesFormat.java (revision 1553093)
+++ lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingDocValuesFormat.java (working copy)
@@ -37,6 +37,7 @@
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.FixedBitSet;
import org.apache.lucene.util.OpenBitSet;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.RamUsageEstimator;
/**
@@ -304,7 +305,7 @@
}
@Override
- public long ramBytesUsed() {
+ public RamUsage ramBytesUsed() {
return in.ramBytesUsed();
}
}
Index: lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPostingsFormat.java
===================================================================
--- lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPostingsFormat.java (revision 1553093)
+++ lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingPostingsFormat.java (working copy)
@@ -34,6 +34,7 @@
import org.apache.lucene.index.Terms;
import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.RamUsage;
/**
* Just like {@link Lucene41PostingsFormat} but with additional asserts.
@@ -86,7 +87,7 @@
}
@Override
- public long ramBytesUsed() {
+ public RamUsage ramBytesUsed() {
return in.ramBytesUsed();
}
}
Index: lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingStoredFieldsFormat.java
===================================================================
--- lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingStoredFieldsFormat.java (revision 1553093)
+++ lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingStoredFieldsFormat.java (working copy)
@@ -30,6 +30,7 @@
import org.apache.lucene.index.StoredFieldVisitor;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.IOContext;
+import org.apache.lucene.util.RamUsage;
/**
* Just like {@link Lucene41StoredFieldsFormat} but with additional asserts.
@@ -73,7 +74,7 @@
}
@Override
- public long ramBytesUsed() {
+ public RamUsage ramBytesUsed() {
return in.ramBytesUsed();
}
}
Index: lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingTermVectorsFormat.java
===================================================================
--- lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingTermVectorsFormat.java (revision 1553093)
+++ lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingTermVectorsFormat.java (working copy)
@@ -31,6 +31,7 @@
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.IOContext;
import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.RamUsage;
/**
* Just like {@link Lucene40TermVectorsFormat} but with additional asserts.
@@ -72,7 +73,7 @@
}
@Override
- public long ramBytesUsed() {
+ public RamUsage ramBytesUsed() {
return in.ramBytesUsed();
}
}
Index: lucene/test-framework/src/java/org/apache/lucene/codecs/ramonly/RAMOnlyPostingsFormat.java
===================================================================
--- lucene/test-framework/src/java/org/apache/lucene/codecs/ramonly/RAMOnlyPostingsFormat.java (revision 1553093)
+++ lucene/test-framework/src/java/org/apache/lucene/codecs/ramonly/RAMOnlyPostingsFormat.java (working copy)
@@ -49,6 +49,7 @@
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.FixedBitSet;
import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.RamUsage;
import org.apache.lucene.util.RamUsageEstimator;
/** Stores all postings data in RAM, but writes a small
@@ -87,12 +88,12 @@
}
@Override
- public long ramBytesUsed() {
- long sizeInBytes = 0;
- for(RAMField field : fieldToTerms.values()) {
- sizeInBytes += field.ramBytesUsed();
+ public RamUsage ramBytesUsed() {
+ List<RamUsage> details = new ArrayList<RamUsage>();
+ for (Map.Entry<String, RAMField> entry : fieldToTerms.entrySet()) {
+ details.add(new RamUsage(entry.getValue().ramBytesUsed(), entry.getKey()));
}
- return sizeInBytes;
+ return new RamUsage(getClass().getName(), details);
}
}
Index: solr/core/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java
===================================================================
--- solr/core/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java (revision 1553093)
+++ solr/core/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java (working copy)
@@ -576,7 +576,7 @@
for(AtomicReaderContext atomicReaderContext : reader.leaves()) {
AtomicReader atomicReader = atomicReaderContext.reader();
if (atomicReader instanceof SegmentReader) {
- indexHeapRamBytesUsed += ((SegmentReader) atomicReader).ramBytesUsed();
+ indexHeapRamBytesUsed += ((SegmentReader) atomicReader).ramBytesUsed().bytes;
} else {
// Not supported for any reader that is not a SegmentReader
return -1;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment