【发布时间】:2015-03-06 12:25:30
【问题描述】:
简短的故事:我无法从同一个客户端进程对 solr5(与 4.10 相同的故事)同时运行超过 2 次搜索。我错过了配置文件中的任何标志吗?事实证明,这不是硬件问题或软件(客户端)问题。完整的故事见下文。
长篇大论:
我需要构建一个基于单词的搜索引擎(字段通常只包含一个单词/值 - 即使它是一个多值字段,所有值也只会是一个单词)和 60-70% 的搜索没有通配符。预期的核心大小约为 50K 文档,平均有 20 个字段。该集合预计每周更新一次(可能甚至更少) - 所以我并不真正关心索引时间。我想我们可以放心地假设不会有写入,只有读取 - 因此,我们可以最大限度地减少锁定和其他并发问题的可能性。此外,我的测试中最“昂贵”的查询是(根据 solr 的 qtime)大约 150。我有一批 10K 随机生成的搜索,无论我在做什么,我都无法在 5 分钟内完成它们.无论我在客户端打开多少线程,无论我在配置文件中设置什么值......处理器大约是 30-40% 的顶部,只有 30% 的内存;
我尝试过的:
- solr5 + jetty 在具有 3GB RAM 的单核虚拟机上;
- solr5 + jetty 在具有 6GB RAM(Java 为 4GB)的双核虚拟机上;
- 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