增加Solr搜索并发性

时间:2015-03-06 12:25:31

标签: java multithreading search solr concurrency

短篇小说:我无法在同一客户端进程中对solr5(4.10的同一故事)同时进行2次以上的搜索。我错过了配置文件中的标志吗?事实证明,这不是硬件问题或软件(客户端)问题。请参阅下面的完整故事。

长篇故事:

我需要建立一个基于单词的搜索引擎(字段通常只包含一个单词/值 - 即使它是一个多值字段,所有值只有一个单词)和60-70%的搜索没有通配符。预期的核心大小约为50K文档,平均为20个字段。该系列预计每周更新一次(可能更少) - 因此我并不真正关心索引时间。我想我们可以安全地假设没有写入,只是读取 - 因此,我们可以最小化锁定和其他并发问题的可能性。此外,最昂贵的"我的测试中的查询是(根据solr' qtime)大约150.我有一批10K无法生成的搜索,无论我在做什么,我都无法在不到5分钟内完成它们。无论我在客户端打开了多少个线程,无论我在配置文件中设置了多少值...处理器大约30-40%的顶部,只有30%的内存;

我尝试过:

  1. solr5 + jetty在具有3GB RAM的单核虚拟机上;
  2. solr5 + jetty在具有6GB RAM的双核虚拟机上(4GB用于java);
  3. 在具有6GB RAM的双核虚拟机上
  4. solr5 + tomcat6;
  5. 使用netstat -a -n | grep @port代表#1和#2我在任何给定时间只看到2个活动连接(ESTABLISHED) - 但没有更多,而对于#3我在TIME_WAIT其他10-15个活动连接旁边模式(未激活)。

    我在某种程度上迷失了...我不是Java忍者,我不喜欢与Java相关的产品及其配置。我使用了两个不同的servlet容器,但问题几乎相同。国际海事组织,很明显有人限制了活跃的联系 - 我不知道该怎么做以找出谁和为什么。

    作为旁注 - 我不确定它是否重要 - 我在同一台机器上复制了相同的工具,开始了#34;压力"与我的机器上的那个同时测试,我注意到活动连接的数量加倍(通过netstat),资源只比单机测试高一点,并且执行时间是两者的同意机器:5分钟。

    那么,我应该怎么做才能消除这个限制 - 或者至少增加它?

1 个答案:

答案 0 :(得分:1)

像往常一样,问题出在椅子和键盘之间。 :(

客户端是在C#中使用普通的旧WebRequest类完成的 - 它遵循对同一地址进行的并发HTTP调用的系统限制(以避免DOS)。

阅读this文章后,我意识到问题所在。因此,app.config中的以下调整解决了这个问题:

<system.net>
    <connectionManagement>
        <add address = "*" maxconnection = "300" />
    </connectionManagement>
</system.net>

它在大约一分钟内用16个打开的线程完成了所有这些请求。在netstats中也可以看到活动连接。