Solr I/O 随时间增加
Solr I/O increases over time
我 运行 负载均衡器后面有大约八个 solr
服务器(版本 3.5
)实例。所有服务器都是相同的,LB 由连接数加权。服务器有大约 400 万份文件,并接收源源不断的查询。当 solr 服务器启动时,它工作正常。但过了一段时间 运行,它开始花更长的时间响应查询,服务器 I/O 疯狂到 100%。查看 New Relic 图片:
如果服务器一开始表现良好,我会在一段时间后开始出现故障吗?然后,如果我重新启动服务器,它会同时回到低 I/O 并且一遍又一遍地重复。
该问题的答案与this blog post中的内容有关。
在这种情况下发生的情况是查询高度依赖于读取 solr
索引。这些索引在磁盘中,以I/Oi 高。为了优化磁盘访问,Linux OS 在内存中为最常访问的磁盘区域创建缓存。它为此缓存使用空闲内存(未占用我的应用程序)。当内存满了,服务器需要重新从磁盘读取。因此,当solr重新启动时,JVM占用的内存更少,磁盘缓存有更多的空闲space。
(问题发生在具有 15Gb RAM 和 20Gb solr
索引的服务器中)
解决方案是简单地增加服务器的 RAM,这样整个索引都适合内存,不需要 I/O。
我 运行 负载均衡器后面有大约八个 solr
服务器(版本 3.5
)实例。所有服务器都是相同的,LB 由连接数加权。服务器有大约 400 万份文件,并接收源源不断的查询。当 solr 服务器启动时,它工作正常。但过了一段时间 运行,它开始花更长的时间响应查询,服务器 I/O 疯狂到 100%。查看 New Relic 图片:
如果服务器一开始表现良好,我会在一段时间后开始出现故障吗?然后,如果我重新启动服务器,它会同时回到低 I/O 并且一遍又一遍地重复。
该问题的答案与this blog post中的内容有关。
在这种情况下发生的情况是查询高度依赖于读取 solr
索引。这些索引在磁盘中,以I/Oi 高。为了优化磁盘访问,Linux OS 在内存中为最常访问的磁盘区域创建缓存。它为此缓存使用空闲内存(未占用我的应用程序)。当内存满了,服务器需要重新从磁盘读取。因此,当solr重新启动时,JVM占用的内存更少,磁盘缓存有更多的空闲space。
(问题发生在具有 15Gb RAM 和 20Gb solr
索引的服务器中)
解决方案是简单地增加服务器的 RAM,这样整个索引都适合内存,不需要 I/O。