在EC2 debian实例上优化Solr 4

ted*_*uss 1 garbage-collection solr jvm amazon-ec2

我的Solr 4实例很慢,我不知道为什么.我试图修改JVM,Tomcat6和Solr 4的配置以优化性能,每秒查询作为关键指标.目前我正在small使用Debian squeeze 在EC2 层上运行,但是如果需要可以切换到Ubuntu.

我的用例没有什么特别之处.指数很小.查询确实包括中等数量的联合(例如10),加上刻面,但我认为这并不常见.

我的理解是这些领域可能需要调整:

  • 配置JVM垃圾收集计划和内存分配("GC调优是一种精确的艺术形式",参考)
  • 其他JVM设置
  • Solr的查询结果缓存,过滤缓存,文档缓存设置
  • Solr的自动加温设置

有许多方法可以监控Solr的性能:

但是这些方法都没有指出需要调整哪些设置,并且没有指导我通过详尽的设置列表知道这些步骤可能会提高性能.我已经回顾了以下几页(,,,),到目前为止经历了几轮试验和错误而没有改进.

问题:

  • 如何告诉JVM在小EC2实例上使用所有2 GB内存?
  • 如何调试和优化JVM垃圾收集?
  • 我如何知道I/O限制的时间,例如新的EBS IOPS定价,是什么问题?
  • 使用下面的NewRelic示例之类的数字,如何检测有问题的行为,以及如何处理解决方案.

回答:

  • 我正在寻找从DevOps或服务器管理角度(而不是索引或应用程序设计)设置和优化Solr 4的良好文档的链接.
  • 我正在寻找最有可能导致问题的catalina.sh,solrconfig.xml,solr.xml(其他?)中的顶级麻烦点.
  • 或者您认为解决问题的任何提示.

在此输入图像描述 在此输入图像描述

Pie*_*rte 5

首先,您不应该专注于切换Linux发行版.不同的分布可能会带来一些变化,但考虑到您提供的信息,没有任何证据表明这些变化可能很重要.

你提到了很多可能的优化,这可能是压倒性的.只有在证明问题出现在堆栈的特定部分后,才应考虑调整区域.

JVM堆大小

您可以使用该参数-mx1700m为JVM提供最大1.7GB的RAM.Hotspot可能不需要它,所以如果你的堆容量没有达到那个数字,不要感到惊讶.

您应该将最小堆大小设置为较低的值,以便Hotspot可以优化其内存使用量.例如,要将最小堆大小设置为128MB,请使用-mx128m.

垃圾收集器

根据您的说法,您的硬件有限(1核,最大1.2GHz,请参阅此页)

M1小实例

  • 1.7 GiB内存
  • 1个EC2计算单元(1个虚拟核心,带1个EC2计算单元)
  • ...

一个EC2计算单元提供1.0-1.2 GHz 2007 Opteron或2007 Xeon处理器的等效CPU容量

因此,使用低延迟GC(CMS)将无济于事.由于您只有一个核心,它将无法与您的应用程序同时运行.您应该使用切换到吞吐量GC -XX:+UseParallelGC -XX:+UseParallelOldGC.

GC真的有问题吗?

要回答该问题,您需要打开GC日志记录.这是查看GC暂停是否对您的应用程序响应时间负责的唯一方法.你应该打开它们-Xloggc:gc.log -XX:+PrintGCDetails.

但我不认为这里存在问题.

这是硬件问题吗?

要回答此问题,您需要监视资源利用率(磁盘I/O,网络I/O,内存使用情况,CPU使用率).你有很多的工具来做到这一点,包括top,free,vmstat,iostat,mpstat,ifstat,...

如果您发现其中一些资源是饱和的,那么您需要一个更大的EC2实例.

这是软件问题吗?

在您的统计信息中,文档缓存命中率和过滤器缓存命中率是健康的.但是,我认为查询结果缓存命中率非常低.这意味着很多查询操作.

您应该监视查询执行时间.根据该值,您可能希望增加缓存大小或调整查询,以便缩短查看时间.

更多链接

希望有所帮助!