如何查看solr中cache的使用情况

之前在 这篇博客中 (http://suichangkele.iteye.com/blog/2365868)写到了关于solr所使用的cache的统计信息的获取,但是他只在更新SolrIndexSearcher的时候才会触发,那么如何能随时的查看cache的使用情况呢?倒着推:如果要查找缓存的使用,必须获得SolrCore,获得SolrCore太简单了,任何一个Request都可以获得SorlCore,那么只要添加一个RequestHandler就可以了。我的代码如下:

public class CacheStatisticsRequestHandler extends RequestHandlerBase{

	/**这四个参数分别对应solrconf.xml中的四个缓存的名字*/
	public static final String  filterCache_name = "filterCache";
	public static final String  queryResultCache_name = "queryResultCache";
	public static final String  documentCache_name = "documentCache";
	public static final String  fieldValueCache_name = "fieldValueCache";
	
	private static final Logger logger = LoggerFactory.getLogger(CacheStatisticsRequestHandler.class);
	
	@Override
	public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {

		logger.debug("参数是:" + req.getParams());
		
		Map<String, SolrInfoMBean> info = req.getCore().getInfoRegistry();
		rsp.add(CacheStatisticsRequestHandler.filterCache_name, info.get(CacheStatisticsRequestHandler.filterCache_name).getStatistics());
		rsp.add(CacheStatisticsRequestHandler.queryResultCache_name, info.get(CacheStatisticsRequestHandler.queryResultCache_name).getStatistics());
		rsp.add(CacheStatisticsRequestHandler.documentCache_name, info.get(CacheStatisticsRequestHandler.documentCache_name).getStatistics());
		rsp.add(CacheStatisticsRequestHandler.fieldValueCache_name, info.get(CacheStatisticsRequestHandler.fieldValueCache_name).getStatistics());
		
	}

	/**这个方法会自动的被调用,不用显示在构造方法中调用*/
	@Override
	public void init(NamedList args) {
		super.init(args);
		logger.info("初始化" + this.getClass().getName() + "实例");
	}
	
	@Override
	public String getDescription() {
		return null;
	}

}

 然后再solrconf.xml中配置一下就可以了

 <requestHandler name="/cacheStats" class="com.comall.requestHandler.CacheStatisticsRequestHandler ">
	<!--自己定义的requestHandler-->
  </requestHandler>

然后在浏览器中访问一下这个requestHandler就可以了 。

猜你喜欢

转载自suichangkele.iteye.com/blog/2366078