短篇小说:我无法在同一客户端进程中对solr5(4.10的同一故事)同时进行2次以上的搜索。我错过了配置文件中的标志吗?事实证明,这不是硬件问题或软件(客户端)问题。请参阅下面的完整故事。
长篇故事:
我需要建立一个基于单词的搜索引擎(字段通常只包含一个单词/值 - 即使它是一个多值字段,所有值只有一个单词)和60-70%的搜索没有通配符。预期的核心大小约为50K文档,平均为20个字段。该系列预计每周更新一次(可能更少) - 因此我并不真正关心索引时间。我想我们可以安全地假设没有写入,只是读取 - 因此,我们可以最小化锁定和其他并发问题的可能性。此外,最昂贵的"我的测试中的查询是(根据solr' qtime)大约150.我有一批10K无法生成的搜索,无论我在做什么,我都无法在不到5分钟内完成它们。无论我在客户端打开了多少个线程,无论我在配置文件中设置了多少值...处理器大约30-40%的顶部,只有30%的内存;
我尝试过:
使用netstat -a -n | grep @port
代表#1和#2我在任何给定时间只看到2个活动连接(ESTABLISHED) - 但没有更多,而对于#3我在TIME_WAIT其他10-15个活动连接旁边模式(未激活)。
我在某种程度上迷失了...我不是Java忍者,我不喜欢与Java相关的产品及其配置。我使用了两个不同的servlet容器,但问题几乎相同。国际海事组织,很明显有人限制了活跃的联系 - 我不知道该怎么做以找出谁和为什么。
作为旁注 - 我不确定它是否重要 - 我在同一台机器上复制了相同的工具,开始了#34;压力"与我的机器上的那个同时测试,我注意到活动连接的数量加倍(通过netstat),资源只比单机测试高一点,并且执行时间是两者的同意机器:5分钟。
那么,我应该怎么做才能消除这个限制 - 或者至少增加它?
答案 0 :(得分:1)
像往常一样,问题出在椅子和键盘之间。 :(
客户端是在C#中使用普通的旧WebRequest类完成的 - 它遵循对同一地址进行的并发HTTP调用的系统限制(以避免DOS)。
阅读this文章后,我意识到问题所在。因此,app.config中的以下调整解决了这个问题:
<system.net>
<connectionManagement>
<add address = "*" maxconnection = "300" />
</connectionManagement>
</system.net>
它在大约一分钟内用16个打开的线程完成了所有这些请求。在netstats中也可以看到活动连接。