java增强Solr搜索并发性
短故事:我无法从同一个客户端进程在solr5(与4.10相同的故事)上同时运行超过2个搜索。配置文件中是否有我遗漏的标志?事实证明,这不是硬件问题或软件(客户端)问题。完整的故事见下文
长话短说:
我需要建立一个基于单词的搜索引擎(字段通常只包含一个单词/值-即使是多值字段,所有值也只包含一个单词),60-70%的搜索没有通配符。预期核心大小约为50K个文档,平均包含20个字段。该集合预计每周更新一次(可能更少)——因此我并不真正关心索引时间。我想我们可以安全地假设不会有写操作,只会有读操作——因此,我们可以最小化锁和其他并发问题的概率。此外,在我的测试中,最“昂贵”的查询(根据solr的qtime)大约是150。我有一批10K radomly生成的搜索,无论我在做什么,我都无法在5分钟内完成它们。无论我在客户端打开多少线程,无论我在配置文件中设置了什么值。。。处理器大约有30-40%的顶部,只有30%的内存
我所尝试的:
- solr5+jetty在单核虚拟机上,具有3GB RAM李>
- solr5+jetty在双核虚拟机上,具有6GB RAM(java为4GB)李>
- solr5+tomcat6,在具有6GB RAM的双核虚拟机上运行李>
使用netstat -a -n | grep @port
for#1和#2,我在任何给定时间只看到2个活动连接(已建立),但没有更多,对于#3,我在这2个活动连接旁边还有10-15个处于时间等待模式(未活动)
不知怎的,我迷失在这。。。我不是Java忍者,也不精通Java相关产品及其配置。我使用了两个不同的servlet容器来解决几乎相同的问题。在我看来,很明显有人限制了活动的连接——我不知道该怎么做才能找出是谁和为什么
作为旁注-我不确定它是否重要-我在另一台机器上复制了相同的工具,同时在我的机器上启动了“压力”测试,我注意到活动连接的数量增加了一倍(通过netstat),资源只比单机测试稍微高一点,两台机器的执行时间相同:5分钟
那么,我应该做些什么来消除这个限制——或者至少增加它
# 1 楼答案
和往常一样,问题出在椅子和键盘之间(
客户端是在C#中使用普通的旧WebRequest类完成的,该类遵守对同一地址并发HTTP调用的系统限制(以避免DOS)
读完这篇文章后,我意识到问题出在哪里。所以,下面是应用程序中的调整。config解决了这个问题:
它在大约一分钟内完成了所有这些请求,打开了16个线程。活动连接在netstats中也可见