Add to node stats the number of times field cache was evicted due to memory constraints, closes #603.
This commit is contained in:
parent
754b0d7a0f
commit
66d63055df
|
@ -42,6 +42,8 @@ public interface FieldDataCache extends IndexComponent, CloseableComponent {
|
|||
|
||||
void clearUnreferenced();
|
||||
|
||||
long evictions();
|
||||
|
||||
long sizeInBytes();
|
||||
|
||||
long sizeInBytes(String fieldName);
|
||||
|
|
|
@ -69,4 +69,8 @@ public class NoneFieldDataCache extends AbstractIndexComponent implements FieldD
|
|||
@Override public long sizeInBytes(String fieldName) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override public long evictions() {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,4 +45,8 @@ public class ResidentFieldDataCache extends AbstractConcurrentMapFieldDataCache
|
|||
@Override public String type() {
|
||||
return "resident";
|
||||
}
|
||||
|
||||
@Override public long evictions() {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package org.elasticsearch.index.cache.field.data.soft;
|
||||
|
||||
import org.elasticsearch.common.collect.MapEvictionListener;
|
||||
import org.elasticsearch.common.collect.MapMaker;
|
||||
import org.elasticsearch.common.inject.Inject;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
|
@ -27,22 +28,34 @@ import org.elasticsearch.index.cache.field.data.support.AbstractConcurrentMapFie
|
|||
import org.elasticsearch.index.field.data.FieldData;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class SoftFieldDataCache extends AbstractConcurrentMapFieldDataCache {
|
||||
public class SoftFieldDataCache extends AbstractConcurrentMapFieldDataCache implements MapEvictionListener<String, FieldData> {
|
||||
|
||||
private final AtomicLong evictions = new AtomicLong();
|
||||
|
||||
@Inject public SoftFieldDataCache(Index index, @IndexSettings Settings indexSettings) {
|
||||
super(index, indexSettings);
|
||||
}
|
||||
|
||||
@Override protected ConcurrentMap<String, FieldData> buildFieldDataMap() {
|
||||
return new MapMaker().softValues().makeMap();
|
||||
return new MapMaker().softValues().evictionListener(this).makeMap();
|
||||
}
|
||||
|
||||
@Override public long evictions() {
|
||||
return evictions.get();
|
||||
}
|
||||
|
||||
@Override public String type() {
|
||||
return "soft";
|
||||
}
|
||||
|
||||
@Override public void onEviction(@Nullable String s, @Nullable FieldData fieldData) {
|
||||
evictions.incrementAndGet();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package org.elasticsearch.index.cache.field.data.weak;
|
||||
|
||||
import org.elasticsearch.common.collect.MapEvictionListener;
|
||||
import org.elasticsearch.common.collect.MapMaker;
|
||||
import org.elasticsearch.common.inject.Inject;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
|
@ -27,22 +28,34 @@ import org.elasticsearch.index.cache.field.data.support.AbstractConcurrentMapFie
|
|||
import org.elasticsearch.index.field.data.FieldData;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class WeakFieldDataCache extends AbstractConcurrentMapFieldDataCache {
|
||||
public class WeakFieldDataCache extends AbstractConcurrentMapFieldDataCache implements MapEvictionListener<String, FieldData> {
|
||||
|
||||
private final AtomicLong evictions = new AtomicLong();
|
||||
|
||||
@Inject public WeakFieldDataCache(Index index, @IndexSettings Settings indexSettings) {
|
||||
super(index, indexSettings);
|
||||
}
|
||||
|
||||
@Override protected ConcurrentMap<String, FieldData> buildFieldDataMap() {
|
||||
return new MapMaker().weakValues().makeMap();
|
||||
return new MapMaker().weakValues().evictionListener(this).makeMap();
|
||||
}
|
||||
|
||||
@Override public String type() {
|
||||
return "weak";
|
||||
}
|
||||
|
||||
@Override public long evictions() {
|
||||
return evictions.get();
|
||||
}
|
||||
|
||||
@Override public void onEviction(@Nullable String s, @Nullable FieldData fieldData) {
|
||||
evictions.incrementAndGet();
|
||||
}
|
||||
}
|
|
@ -43,13 +43,17 @@ public class IndicesStats implements Streamable, Serializable, ToXContent {
|
|||
|
||||
private ByteSizeValue filterCacheSize;
|
||||
|
||||
private long fieldCacheEvictions;
|
||||
|
||||
IndicesStats() {
|
||||
}
|
||||
|
||||
public IndicesStats(ByteSizeValue storeSize, ByteSizeValue fieldCacheSize, ByteSizeValue filterCacheSize) {
|
||||
public IndicesStats(ByteSizeValue storeSize, ByteSizeValue fieldCacheSize, ByteSizeValue filterCacheSize,
|
||||
long fieldCacheEvictions) {
|
||||
this.storeSize = storeSize;
|
||||
this.fieldCacheSize = fieldCacheSize;
|
||||
this.filterCacheSize = filterCacheSize;
|
||||
this.fieldCacheEvictions = fieldCacheEvictions;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -82,6 +86,14 @@ public class IndicesStats implements Streamable, Serializable, ToXContent {
|
|||
return this.filterCacheSize;
|
||||
}
|
||||
|
||||
public long fieldCacheEvictions() {
|
||||
return this.fieldCacheEvictions;
|
||||
}
|
||||
|
||||
public long getFieldCacheEvictions() {
|
||||
return fieldCacheEvictions();
|
||||
}
|
||||
|
||||
public static IndicesStats readIndicesStats(StreamInput in) throws IOException {
|
||||
IndicesStats stats = new IndicesStats();
|
||||
stats.readFrom(in);
|
||||
|
@ -104,6 +116,7 @@ public class IndicesStats implements Streamable, Serializable, ToXContent {
|
|||
builder.startObject(Fields.INDICES);
|
||||
builder.field(Fields.STORE_SIZE, storeSize.toString());
|
||||
builder.field(Fields.STORE_SIZE_IN_BYTES, storeSize.bytes());
|
||||
builder.field(Fields.FIELD_CACHE_EVICTIONS, fieldCacheEvictions);
|
||||
builder.field(Fields.FIELD_CACHE_SIZE, fieldCacheSize.toString());
|
||||
builder.field(Fields.FIELD_CACHE_SIZE_IN_BYTES, fieldCacheSize.bytes());
|
||||
builder.field(Fields.FILTER_CACHE_SIZE, filterCacheSize.toString());
|
||||
|
@ -117,6 +130,7 @@ public class IndicesStats implements Streamable, Serializable, ToXContent {
|
|||
static final XContentBuilderString STORE_SIZE_IN_BYTES = new XContentBuilderString("store_size_in_bytes");
|
||||
static final XContentBuilderString FIELD_CACHE_SIZE = new XContentBuilderString("field_cache_size");
|
||||
static final XContentBuilderString FIELD_CACHE_SIZE_IN_BYTES = new XContentBuilderString("field_cache_size_in_bytes");
|
||||
static final XContentBuilderString FIELD_CACHE_EVICTIONS = new XContentBuilderString("field_cache_evictions");
|
||||
static final XContentBuilderString FILTER_CACHE_SIZE = new XContentBuilderString("filter_cache_size");
|
||||
static final XContentBuilderString FILTER_CACHE_SIZE_IN_BYTES = new XContentBuilderString("filter_cache_size_in_bytes");
|
||||
}
|
||||
|
|
|
@ -156,6 +156,7 @@ public class InternalIndicesService extends AbstractLifecycleComponent<IndicesSe
|
|||
|
||||
@Override public IndicesStats stats() {
|
||||
long storeTotalSize = 0;
|
||||
long fieldCacheEvictions = 0;
|
||||
long fieldCacheTotalSize = 0;
|
||||
long filterCacheTotalSize = 0;
|
||||
for (IndexService indexService : indices.values()) {
|
||||
|
@ -166,10 +167,11 @@ public class InternalIndicesService extends AbstractLifecycleComponent<IndicesSe
|
|||
// ignore
|
||||
}
|
||||
}
|
||||
fieldCacheEvictions += indexService.cache().fieldData().evictions();
|
||||
fieldCacheTotalSize += indexService.cache().fieldData().sizeInBytes();
|
||||
filterCacheTotalSize += indexService.cache().filter().sizeInBytes();
|
||||
}
|
||||
return new IndicesStats(new ByteSizeValue(storeTotalSize), new ByteSizeValue(fieldCacheTotalSize), new ByteSizeValue(filterCacheTotalSize));
|
||||
return new IndicesStats(new ByteSizeValue(storeTotalSize), new ByteSizeValue(fieldCacheTotalSize), new ByteSizeValue(filterCacheTotalSize), fieldCacheEvictions);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue