我是 solr 新手,正在对我们的设置进行负载测试,看看我们能处理什么。我正在使用 solrmeter,我的问题有点奇怪:
- 当我将 solrmeter 设置为每分钟运行 8000 个查询时,它将处理几百个查询,然后 tomcat 将完全停止响应请求(即使
lsof -i
它仍在监听并且 java 进程仍在运行)。 - 当我将 solrmeter 设置为每分钟运行 1000 次查询时,它运行良好。几分钟后我就可以停止 solrmeter,然后以每分钟 8000 次的速度运行,没有任何问题。
好像需要加速时间?另外,我注意到(无论加速与否)我的设置无法处理 12000/分钟。12k/分钟的反应与我以 8k/分钟的速度运行而不加速时的反应相同。值得注意的是,只有 solrmeter 指向的碎片停止响应。另一个碎片嗡嗡作响,没有发生任何意外。
设置(AWS 中的所有内容):
- 2x m1.large(7.5Gb RAM)运行 tomcat7 + solr 4.2.0(open-jdk-7-headless):Ubuntu 12.04
- 1x m1.micro 运行 zookeeper 3.4.5:Ubuntu 12.04
我的 solr/tomcat7 配置绝大部分都是 ubuntu 的 packages/solr 示例中的默认配置。以下是配置和 catalina.out 文件的结尾:https://gist.github.com/anonymous/ef8fa79ecc1673d11bc0
我将 solrmeter 控制台 (stderr 和 stdout) 重定向到一个文件。这是一个很大的日志 (67Mb): https://docs.google.com/file/d/0BwPYmFCfmBYsU1hDWjlkUGdGTlU/edit?usp=sharing
我的主要问题有两个:
- 当 tomcat 不堪重负时,这是正常行为吗(完全停止响应)?唯一的选择是重新启动它?
- 为什么当我给它较少的查询数然后增加它时,它会处理得更好?我担心如果我必须重新启动集群中的服务器,并且它被扔进机器池中,事情就会崩溃。
答案1
当 tomcat 冻结时,您可以每隔 2-3 分钟运行 2-3 个线程转储。您可以分析它们并找出 tomcat 正在做什么。
您可以使用jvisualvm
JDK 自带的来查看堆使用率是否不高,并获取线程转储。
答案2
最终的解决方案是使用 Connector 上的 maxThreads。将其提高到比默认值 (200) 高得多的数字 (10000),这样 Solr (和 Tomcat) 就可以更好地处理“即时”负载。