Hel*_*rld 6 java solr memory-leaks
我的 Java 程序在 Linux 下运行,并使用 SOLR 7.4 索引多个目录(通过 samba 从不同的 Windows 服务器安装)。它依次更新不同的索引(每个索引目录一个索引)并无限循环。
在我的开发机器上运行时,我将 VisualVM 连接到它并看到线程数量不断增加:
从这个帖子我明白了了解到它与内存泄漏有关(我也在试图找到)。
VisualVM 显示连接驱逐器线程不断累积并且全部处于休眠状态:
但这个帖子告诉我们,睡眠线程不会给系统增加任何负载(因为它们是空闲的),因此它们不会导致内存泄漏。
所以我的问题是:
我是否应该认为这种行为是一个问题,如果是这样,我应该在源代码中查看哪里,因为我不使用http连接(我读到使用连接驱逐器),因为所有目录都是由操作系统本地安装的?
任何帮助表示赞赏;-)
简要回答我自己的问题:
是的,拥有如此多的连接驱逐线程在生产中是一个问题,因为我认为它会在一段时间后导致 OOM。
对我来说,出现问题是因为我创建了太多的SolrClients,而只需要一个(所有核心都在同一台服务器上)。
所以而不是
solrClient = new HttpSolrClient.Builder(
getSolrHomePath() + "/" + getCoreName()
).
build();
Run Code Online (Sandbox Code Playgroud)
wheregetSolrHomePath()返回 的路径solr-X.Y.Z/server/solr。
我现在用
commonSolrClient = new HttpSolrClient.Builder(
getSolrHomePath()
).
build();
Run Code Online (Sandbox Code Playgroud)
当我需要query核心时,我将核心名称作为第一个参数传递给query函数。添加/删除方法相同!
| 归档时间: |
|
| 查看次数: |
3217 次 |
| 最近记录: |