SOLR-1292: Add FieldCache introspection to stats.jsp and JMX Monitoring via a new SolrFieldCacheMBean

git-svn-id: https://svn.apache.org/repos/asf/lucene/solr/trunk@818618 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Chris M. Hostetter 2009-09-24 20:35:56 +00:00
parent 43b546fede
commit 415355687d
3 changed files with 83 additions and 0 deletions

View File

@ -326,6 +326,9 @@ New Features
n-grams and using them at query time. n-grams and using them at query time.
(Tom Burton-West, Jason Rutherglen via yonik) (Tom Burton-West, Jason Rutherglen via yonik)
83. SOLR-1292: Add FieldCache introspection to stats.jsp and JMX Monitoring via
a new SolrFieldCacheMBean. (hossman)
Optimizations Optimizations
---------------------- ----------------------
1. SOLR-374: Use IndexReader.reopen to save resources by re-using parts of the 1. SOLR-374: Use IndexReader.reopen to save resources by re-using parts of the

View File

@ -35,6 +35,7 @@ import org.apache.solr.highlight.SolrHighlighter;
import org.apache.solr.request.*; import org.apache.solr.request.*;
import org.apache.solr.schema.IndexSchema; import org.apache.solr.schema.IndexSchema;
import org.apache.solr.search.QParserPlugin; import org.apache.solr.search.QParserPlugin;
import org.apache.solr.search.SolrFieldCacheMBean;
import org.apache.solr.search.SolrIndexSearcher; import org.apache.solr.search.SolrIndexSearcher;
import org.apache.solr.search.ValueSourceParser; import org.apache.solr.search.ValueSourceParser;
import org.apache.solr.update.DirectUpdateHandler2; import org.apache.solr.update.DirectUpdateHandler2;
@ -527,6 +528,8 @@ public final class SolrCore implements SolrInfoMBean {
infoRegistry = new ConcurrentHashMap<String, SolrInfoMBean>(); infoRegistry = new ConcurrentHashMap<String, SolrInfoMBean>();
} }
infoRegistry.put("fieldCache", new SolrFieldCacheMBean());
this.schema = schema; this.schema = schema;
this.dataDir = dataDir; this.dataDir = dataDir;
this.solrConfig = config; this.solrConfig = config;

View File

@ -0,0 +1,77 @@
/**
* 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.
*/
package org.apache.solr.search;
import java.net.URL;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrInfoMBean;
import org.apache.lucene.search.FieldCache;
import org.apache.lucene.search.FieldCache.CacheEntry;
import org.apache.lucene.util.FieldCacheSanityChecker;
import org.apache.lucene.util.FieldCacheSanityChecker.Insanity;
/**
* A SolrInfoMBean that provides introspection of the Lucene FiledCache, this is <b>NOT</b> a cache that is manged by Solr.
*
* @version $Id:$
*/
public class SolrFieldCacheMBean implements SolrInfoMBean {
protected FieldCacheSanityChecker checker = new FieldCacheSanityChecker();
public String getName() { return this.getClass().getName(); }
public String getVersion() { return SolrCore.version; }
public String getDescription() {
return "Provides introspection of the Lucene FiledCache, "
+ "this is **NOT** a cache that is manged by Solr.";
}
public Category getCategory() { return Category.CACHE; }
public String getSourceId() {
return "$Id:$";
}
public String getSource() {
return "$URL:$";
}
public URL[] getDocs() {
return null;
}
public NamedList getStatistics() {
NamedList stats = new SimpleOrderedMap();
CacheEntry[] entries = FieldCache.DEFAULT.getCacheEntries();
stats.add("entries_count", entries.length);
for (int i = 0; i < entries.length; i++) {
CacheEntry e = entries[i];
e.estimateSize();
stats.add("entry#" + i, e.toString());
}
Insanity[] insanity = checker.checkSanity(entries);
stats.add("instanity_count", insanity.length);
for (int i = 0; i < insanity.length; i++) {
stats.add("insanity#" + i, insanity[i].toString());
}
return stats;
}
}