InfoQ

新闻

Lucid Imagination发布了Apache Lucene性能监测工具

作者 Charles Humble 译者 宋玮 发布于 2009年9月11日 上午8时59分

社区
Java
主题
搜索
标签
Lucene

Lucid Imagination是一家采用Apache Lucene和Solr搜索引擎类库从事相关开发的商业公司,其引入了一个新的名叫LucidGaze的监测工具。该产品给开发者提供了一个针对Lucene的完整版本的性能监测工具。性能数据可以打印在日志文件中、存储在轮询数据库中、或者通过Java API来使用。如果使用了轮询数据库,则可以采用RRD4j类库提供的一个标准Swing应用程序来读取或处理该数据库。

该软件是以.jar文件提供的,用来替代Lucene的.jar文件,因此安装非常简单。开发者只需在其应用的classpath中将lucene-core.2.4.1.jar替换成lucene-core-gaze.2.4.1.jar即可。这样,开发者无需对其源码做出任何改变。而对于那些无法获得应用程序源代码的情况,该产品也能派上用场。

LucidGaze给开发者提供了一系列分析方法,以观察搜索转换为文档检索操作的状况,索引分析分解用户输入处理的效果,以及文本处理和索引构建的过程。该工具使用5个不同的监视器来搜集统计数据:

  1. 分析统计数据:Analyzer、TokenFilter、TokenStream和Tokenizer的相关数据,以及哪一个Analyzer被用来为特定域产生TokenStream。
  2. 文档统计数据:已建索引文档的总数、以及索引的各个域。
  3. 索引统计数据: IndexReader和IndexWriter的活动和行为,比如查看每个实例、跟踪其每个相关方法的调用、查看缓存及内存使用情况、以及索引增加和提交的平均时间。
  4. 搜索统计数据:查询操作、搜索器性能和处理时间、方法调用统计、以及对大多常用执行的查询。
  5. 存储统计数据: Lucene存储架构的目录实例(directory instance)。

运行所有监视器的开销相当大。在与Lucid Imagination技术团队成员之一Grant Ingersoll的交谈过程中,我们得知这一范围大概在10-15%。但是通过配置需要收集哪些统计数据以及这些数据是否需要被持久化,可以减少这一开销。

InfoQ还与Ingersoll谈到了LucidGaze的一些典型应用。他所强调的第一种应用就是用其发现普通开发者使用Lucene时的常犯错误:没有关闭IndexReader而导致的内存泄漏。LucidGaze搜集当前打开的Indexeader数量,IndexReader#reopen()的调用次数以及其中哪一次调用是在IndexReader的新实例里,除此之外还有JVM中正在用的所有IndexReader所消耗的RAM总数。在捕捉因没有关闭reader而引起的内存泄漏时这些统计数据很有用处——如果你认为使用了两个IndexReader而内存中却有10个,那基本上可以肯定有地方泄漏了。第二个常见情况是在海量数据(创建和删除大量文档)站点的大量数据测试期间查看重建索引策略。Lucene的索引数据库是由几个独立的“段(segment)”组成,每个都存储在一个独立的文件中。当你给索引增加一个文档时,可能会产生新的段。你可以压缩数据库以减少段的数量,从而加速查询,但是这样做是有开销的,而且计算出最佳策略需要大量的反复运算。LucidGaze所提供的新创建索引段的数量、段合并的数量以及其发生的平均时间,可以帮助开发者调优其实现。该工具还可以用来查看在大量数据测试期间遇到的特定问题——分理出长时间运行的消耗过量资源的查询,或者精确定位导致处理瓶颈的域或文档。

尽管没有开源,但该产品是免费提供的,可以从Lucid Imagination的Web站点上下载。目前该软件只支持Lucene 2.4.1,但Lucid Imagination表示如果需求量大,他们可能会提供对其它版本的支持。

查看英文原文:Lucid Imagination Releases Performance Monitoring Utility for Apache Lucene

深度内容

模块化Java:声明式模块化

本文是模块化Java系列文章的第4篇,介绍的是声明式模块化。文中描述了组件如何以声明的方式来定义并组织在一起,而无需让代码依赖于OSGI API。

Ian Robinson和Jim Webber谈论基于Web的整合

本采访是在伦敦举行的QCon2009上记录的,Ian Robinson和Jim Webber探讨了如何将Web作为整合平台以及REST在理论上和实践中的好处。

项目管理修炼之道(精选版)

项目管理对于项目成败至关重要,但实践中每个项目都有自己的独特性,没有现成的解决方案可以套用。书中从应对实际风险的角度出发,讲述了从项目启动、项目规划到项目结束的整个管理流程,展示了作者的思考过程。本迷你书从原书中精选出5个章节。

那是鸟,还是飞机?不,那是超人!

在这个演讲中,Fred将会揭示敏捷的一些外在因素,并会重点关注敏捷获得成功的内在原因。从案例研究和真实的项目经验来看,Fred认为:工具、管理体系都不能让你变得敏捷。敏捷的成功,植根于士气高涨、充分授权的工作者身上,他们能够以不同以往的方式思考问题。

访谈和书摘:Eben Hewitt的新书《Java SOA Cookbook》

Java SOA Cookbook

Eben Hewitt的新书《Java SOA Cookbook》从Java实现的角度讨论了面向服务架构。Eben在书中讨论了SOA基础、工具、最佳实践和SOA治理等主题。

Mark Richard的《Java消息服务》第二版

Mark Richards的新书《Java消息服务》第二版覆盖了JMS的许多主题, 包括发布和订阅模式以及点对点模式,消息过滤和事务等。InfoQ与Mark谈论了跟他的新作。

模块化Java:动态模块化

本文是“模块化Java”系列文章的第三篇,讨论动态模块化,内容涉及如何解析bundle类、bundle如何变化、以及bundle之间如何通信。

让测试也敏捷起来

对于测试组织来说,敏捷方法带来的快速迭代却让测试本身变得困难起来:缺乏“足够详细的文档”,缺乏“仔细设计用例的时间”等等。在本演讲中,段念将与大家探讨如何在敏捷过程中进行测试。