我的Solr 4实例很慢,我不知道为什么。我试图修改JVM、Tomcat6和Solr 4的配置,以优化性能,以每秒查询作为关键指标。目前,我正在使用Debian挤压的EC2 small
层运行,但如果需要,可以切换到Ubuntu。
我的用例没有什么特别之处。指数很小。查询确实包括一定数量的工会(例如10),加上面见,但我不认为这是不寻常的。
我的理解是,这些领域可能需要调整:
有几种方法可以监测Solr的性能:
但是,这些方法都没有指明哪些设置需要调整,而且我也不知道这方面的指南,没有详细列出可能提高性能的设置列表。我查看了下面的页面(一、二、三、四),并在没有改进的情况下经历了几轮尝试和错误。
问题:
答案:
发布于 2013-05-14 15:10:19
首先,您不应该专注于切换linux发行版。不同的发行版可能会带来一些更改,但考虑到您提供的信息,没有什么可以证明这些更改可能是重要的。
你提到了很多的可能性,你的优化,这可能是压倒性的。只有在证明问题存在于堆栈的特定部分之后,您才应该考虑调整区域。
JVM堆大小
您可以使用参数-mx1700m
向JVM提供最多1.7GB的内存。Hotspot可能不需要它,所以如果堆容量没有达到这个数字,不要感到惊讶。
您应该将最小堆大小设置为一个较低的值,以便Hotspot可以优化其内存使用。例如,若要将最小堆大小设置为128 to,请使用-mx128m
。
垃圾收集器
根据您的说法,您有有限的硬件(1核最大为1.2GHz,参见此页)
M1小实例
一个EC2计算单元提供相当于1.0-1.2 GHz 2007 Opteron或2007 Xeon处理器的CPU容量
因此,使用低延迟GC (CMS)不会有任何好处。它不能与应用程序同时运行,因为您只有一个核心。您应该使用-XX:+UseParallelGC -XX:+UseParallelOldGC
切换到Throughput。
,GC真的是个问题吗?
要回答这个问题,您需要打开GC日志记录。这是查看GC暂停是否对应用程序响应时间负责的唯一方法。您应该用-Xloggc:gc.log -XX:+PrintGCDetails
打开这些。
但我不认为问题就在这里。
是硬件问题吗?
要回答这个问题,您需要监视资源利用率(磁盘I/O、网络I/O、内存使用情况、CPU使用情况)。你有很多工具可以这样做,包括top
,free
,vmstat
,iostat
,mpstat
,ifstat
,.
如果您发现其中一些资源已经饱和,那么您需要一个更大的EC2实例。
是软件问题吗?
在您的统计中,文档缓存命中率和筛选器缓存命中率是正常的。但是,我认为查询结果缓存命中率很低。这意味着许多查询操作。
您应该监视查询执行时间。根据该值,您可能希望增加缓存大小或优化查询,以减少查询时间。
更多链接
希望这能帮上忙!
https://stackoverflow.com/questions/16529884
复制相似问题