我对性能有疑虑,希望得到最适合的建议Multi Core
?Multi Instance(with different port)
我的情况如下:
目前我正在运行具有多个核心的 Solr,并且它运行正常。只有一个问题,有时它会抛出“处理方面字段时堆内存不足”,之后我必须重新启动 solr。(为了最大限度地减少重新启动次数,我使用高内存启动 Solr:java -Xms1000M -Xmx8000M -jar start.jar)
我有一个亚马逊 EC2 实例,它有 8core-2.8GHtz/15GB Ram 和优化的硬盘。
我有许多数据库表(大约 100 个),并且必须为每个表创建不同的模式(导致创建不同的核心)。
每个表有数百万个文档,每个文档有 7-9 个索引字段和 10-50 个存储字段。
我的 Web 门户应处理非常高的流量(目前每秒有 10 个请求,可能会增加到每秒 50-100 个)。我知道“Solr”可以处理这个问题,但我只是想告诉你,我关心的是每一个最小的性能问题
通过 PHP 和 CURL 在特定核心中搜索 Solr,因此在不同的 Solr 实例上搜索也没有问题。
问题:
据我所知Solr 每次处理一个请求。所以我认为如果我创建多个 solr 实例并在不同的端口启动它们,那么我的门户网站可以一次处理更多的请求。(如果用户在不同的表中搜索)。
那么,你会建议我什么?单个 Solr 实例中的多核?还是每个实例中都有单核/双核的多个实例?
在不同端口运行多个 Solr 实例是否存在问题?
笔记:在这里,我可以/可能/将在一个实例中合并较少搜索的核心/小核心和单独实例中的重流量核心或者单实例中两个、三个大流量核心等等。考兹,为每个表创建不同的实例(这里约100个)将占用太多的硬件资源。
答案1
Solr 可以同时处理多个请求。
我已经通过运行一个长查询 [qTime=7203,大约 7 秒] 和长查询之后的几个小查询 [qTime=30] 进行了测试,Solr 首先响应较小的查询,即使它们在长查询之后运行。
这一点给出了充分的答案:使用具有多个核心的单个 solr 实例。只需为 JVM 分配高内存即可。
其他要点:
1.每个 solr 实例都需要 RAM,因此运行多个实例将需要更多资源,这会很昂贵。如果您正在使用facets
,sort fields
则需要为每个实例分配更多 RAM。
正如您所看到的,在我的例子中,我需要使用高内存(8GB)启动 solr。您可以看到一个案例丹麦网络档案馆, 它使用多个实例并为每个实例分配 9GB RAM,累计总 RAM 为 256GM。
2.你可以运行不同端口上的多个 solr 实例通过使用命令java -Djetty.port=8984 -jar start.jar
。一切运行正常,但我遇到了一个问题。
虽然索引可能会给出“内存不足错误”然后 solr 实例将被终止。因此您需要启动具有高内存的第二个实例,这将导致更多的 RAM 需求。
3.了解 Solr 资源需求和性能问题这里。据此建议使用 64 位环境和 12GB RAM 以获得良好的性能。Solr 优化说明这里。