ElasticSearch启动失败:创建Node对象触发AssertionError求助
Elasticsearch 7.17.10 创建Node对象时触发AssertionError错误
问题场景
尝试通过以下代码创建Elasticsearch Node对象:
Settings elasticsearchSettings = Settings.builder() .put("http.cors.enabled", "true") .put("path.data", "target/es-data_" + UUIDs.randomBase64UUID().toLowerCase()) .put("path.home", "target/es-home_" + UUIDs.randomBase64UUID().toLowerCase()) .put("cluster.name", "testCluster") .put(NetworkModule.HTTP_TYPE_KEY, "netty4") .put("http.port", 9200) .build(); private static class ElasticNode extends Node { public ElasticNode(Settings settings, Collection<? extends Class<? extends Plugin>> classpathPlugins) { super(InternalSettingsPreparer.prepareEnvironment(settings,new HashMap<>(), null, () -> "node1"), classpathPlugins, false); } }
运行环境:
- Elasticsearch版本:7.17.10
- Java版本:11.0.4(Oracle Corporation)
- 操作系统:Linux 5.15.0-67-generic(amd64架构)
触发错误栈:
Caused by: java.lang.AssertionError at org.elasticsearch.monitor.os.OsProbe.getControlGroups(OsProbe.java:262) ~[elasticsearch-7.17.10.jar:7.17.10]
解决方案
这个错误源于Elasticsearch在探测Linux cgroup(控制组)信息时断言失败,通常发生在容器环境(如Docker)或者系统cgroup挂载结构特殊的场景中,可通过以下方式修复:
添加cgroup层级覆盖配置:在Settings构建时加入cgroup层级强制指定,避免自动探测失败:
Settings elasticsearchSettings = Settings.builder() // 保留原有配置 .put("cgroups.hierarchy.override", "/") .build();或添加JVM启动参数:在启动Java程序时添加JVM参数,强制指定cgroup层级:
-Des.cgroups.hierarchy.override=/禁用系统调用过滤器(可选):如果上述方法无效,可尝试关闭Elasticsearch的系统调用过滤器(适合测试环境):
Settings elasticsearchSettings = Settings.builder() // 保留原有配置 .put("bootstrap.system_call_filter", false) .build();
内容的提问来源于stack exchange,提问作者Manoj Singh
相关产品推荐
相关产品推荐

