Ubuntu 16.04.1 LTS机器运行Elasticsearch-8.2.0报错求助
解决Ubuntu 16.04 LTS上Elasticsearch 8.2.0启动时的类找不到错误
这个问题我在LXC容器环境(Ubuntu 16.04很常用这个容器方案)里碰见过,本质是JVM输出的cgroup警告被shell误解析成了主类参数,才导致出现Could not find or load main class的错误。下面是几个靠谱的解决办法:
办法一:过滤JVM警告,避免干扰启动命令
Elasticsearch启动脚本执行时,JVM输出的Duplicate cpuset controllers detected警告被shell当成了主类的一部分,我们可以在启动脚本里过滤掉这个警告:
- 打开Elasticsearch目录下的
./bin/elasticsearch脚本 - 找到执行Java的核心行(通常是包含
exec "$JAVA"的那一段),把它替换成:exec "$JAVA" "$@" 2>&1 >/dev/null | grep -v "Duplicate cpuset controllers detected" >&2 - 保存后重新运行
./bin/elasticsearch即可
办法二:禁用JVM的容器环境检测
通过JVM参数直接关闭容器相关的检测,从根源上消除警告:
- 打开Elasticsearch的配置文件
config/jvm.options - 在文件末尾添加一行:
-XX:-UseContainerSupport - 保存后重启Elasticsearch。这个参数在Java 17(Elasticsearch 8.2.0要求的版本)完全支持,不会影响ES的正常运行。
办法三:调整LXC容器的cgroup配置(需容器管理权限)
如果你有权限修改LXC容器的配置,可以直接解决重复cpuset的问题:
- 找到容器的配置文件,通常路径是
/var/lib/lxc/<你的容器名>/config - 添加或修改以下配置:
lxc.cgroup.cpuset.cpus = 0 lxc.cgroup.cpuset.mems = 0 - 重启容器后再启动Elasticsearch,警告就会消失。
内容的提问来源于stack exchange,提问作者namespace-Pt
相关产品推荐
相关产品推荐

