有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java增强Solr搜索并发性

短故事:我无法从同一个客户端进程在solr5(与4.10相同的故事)上同时运行超过2个搜索。配置文件中是否有我遗漏的标志?事实证明,这不是硬件问题或软件(客户端)问题。完整的故事见下文

长话短说:

我需要建立一个基于单词的搜索引擎(字段通常只包含一个单词/值-即使是多值字段,所有值也只包含一个单词),60-70%的搜索没有通配符。预期核心大小约为50K个文档,平均包含20个字段。该集合预计每周更新一次(可能更少)——因此我并不真正关心索引时间。我想我们可以安全地假设不会有写操作,只会有读操作——因此,我们可以最小化锁和其他并发问题的概率。此外,在我的测试中,最“昂贵”的查询(根据solr的qtime)大约是150。我有一批10K radomly生成的搜索,无论我在做什么,我都无法在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 @portfor#1和#2,我在任何给定时间只看到2个活动连接(已建立),但没有更多,对于#3,我在这2个活动连接旁边还有10-15个处于时间等待模式(未活动)

不知怎的,我迷失在这。。。我不是Java忍者,也不精通Java相关产品及其配置。我使用了两个不同的servlet容器来解决几乎相同的问题。在我看来,很明显有人限制了活动的连接——我不知道该怎么做才能找出是谁和为什么

作为旁注-我不确定它是否重要-我在另一台机器上复制了相同的工具,同时在我的机器上启动了“压力”测试,我注意到活动连接的数量增加了一倍(通过netstat),资源只比单机测试稍微高一点,两台机器的执行时间相同:5分钟

那么,我应该做些什么来消除这个限制——或者至少增加它


共 (1) 个答案

  1. # 1 楼答案

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

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

    读完这篇文章后,我意识到问题出在哪里。所以,下面是应用程序中的调整。config解决了这个问题:

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

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