【问题标题】:Increase Solr search concurrency增加 Solr 搜索并发
【发布时间】:2015-03-06 12:25:30
【问题描述】:

简短的故事:我无法从同一个客户端进程对 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(Java 为 4GB)的双核虚拟机上;
  3. solr5 + tomcat6 在具有 6GB RAM 的双核虚拟机上;

netstat -a -n | grep @port 用于#1 和#2 我在任何给定时间只看到 2 个活动连接(已建立) - 但仅此而已,对于#3,我在 TIME_WAIT 模式下除了这 2 个活动连接之外还有 10-15 个(未激活)。

我不知何故迷失了……我不是 Java 忍者,我对与 Java 相关的产品及其配置并不精通。我使用了 2 个不同的 servlet 容器,但问题几乎相同。 IMO,很明显有人限制了活动连接 - 我不知道该怎么做才能找出谁以及为什么。

附带说明 - 我不确定它是否重要 - 我在另一台机器上复制了相同的工具,同时在我的机器上开始了“压力”测试,我注意到数字活动连接数翻倍(通过 netstat),资源仅比单机测试高一点,两台机器的执行时间相同:5 分钟。

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

【问题讨论】:

    标签: java multithreading search solr concurrency


    【解决方案1】:

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

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

    看完this的文章,我才意识到问题出在哪里。因此,app.config 中的以下调整解决了这个问题:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 2014-09-11
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多