Proxmox LXC环境Ubuntu20.04全新安装Elasticsearch无法启动
Elasticsearch在Proxmox LXC容器中启动失败修复
故障基础信息
- 故障场景:使用
.deb包或apt源安装Elasticsearch后服务均无法启动,所有常规教程操作无效 - 运行环境:Proxmox平台部署的Ubuntu 20.04 LXC容器
- 故障日志(服务启动时JVM输出):
[2022-06-10T12:06:13.884+0000][22320][gc,init] CardTable entry size: 512 [2022-06-10T12:06:13.885+0000][22320][gc ] Using G1 [2022-06-10T12:06:13.957+0000][22320][gc,init] Version: 18.0.1.1+2-6 (release) [2022-06-10T12:06:13.957+0000][22320][gc,init] CPUs: 24 total, 4 available [2022-06-10T12:06:13.957+0000][22320][gc,init] Memory: 96593M [2022-06-10T12:06:13.957+0000][22320][gc,init] Large Page Support: Disabled [2022-06-10T12:06:13.957+0000][22320][gc,init] NUMA Support: Disabled [2022-06-10T12:06:13.958+0000][22320][gc,init] Compressed Oops: Enabled (Non-zero disjoint base) [2022-06-10T12:06:13.958+0000][22320][gc,init] Heap Region Size: 16M [2022-06-10T12:06:13.958+0000][22320][gc,init] Heap Min Capacity: 31G [2022-06-10T12:06:13.958+0000][22320][gc,init] Heap Initial Capacity: 31G [2022-06-10T12:06:13.958+0000][22320][gc,init] Heap Max Capacity: 31G [2022-06-10T12:06:13.958+0000][22320][gc,init] Pre-touch: Disabled [2022-06-10T12:06:13.958+0000][22320][gc,init] Parallel Workers: 4 [2022-06-10T12:06:13.958+0000][22320][gc,init] Concurrent Workers: 1 [2022-06-10T12:06:13.958+0000][22320][gc,init] Concurrent Refinement Workers: 4 [2022-06-10T12:06:13.958+0000][22320][gc,init] Periodic GC: Disabled [2022-06-10T12:06:13.958+0000][22320][gc,metaspace] CDS archive(s) not mapped [2022-06-10T12:06:13.958+0000][22320][gc,metaspace] Compressed class space mapped at: 0x0000000080000000-0x00000000c0000000, reserved size: 1073741> [2022-06-10T12:06:13.958+0000][22320][gc,metaspace] Narrow klass base: 0x0000000000000000, Narrow klass shift: 0, Narrow klass range: 0xc0000000 [2022-06-10T12:06:14.152+0000][22320][gc,heap,exit] Heap [2022-06-10T12:06:14.152+0000][22320][gc,heap,exit] garbage-first heap total 32505856K, used 24578K [0x0000001001000000, 0x00000017c1000000) [2022-06-10T12:06:14.152+0000][22320][gc,heap,exit] region size 16384K, 2 young (32768K), 0 survivors (0K) [2022-06-10T12:06:14.152+0000][22320][gc,heap,exit] Metaspace used 3525K, committed 3584K, reserved 1114112K [2022-06-10T12:06:14.152+0000][22320][gc,heap,exit] class space used 271K, committed 320K, reserved 1048576K
故障原因
从日志可以直接定位核心触发点:Elasticsearch自带的JVM读取到宿主机总内存为96G,自动将初始、最小、最大堆内存全部设置为31G,但LXC容器实际分配的可用内存远低于该值,JVM申请内存失败直接退出。
除此之外Proxmox默认创建的LXC容器还有两个隐含配置不满足ES运行要求:
- 宿主机内核参数
vm.max_map_count默认值远低于ES要求的最低阈值262144 - 默认非特权LXC容器的seccomp配置拦截了ES运行需要的keyctl、嵌套虚拟化相关系统调用
修复步骤
所有操作按顺序执行即可:
- 先关闭故障的Ubuntu 20.04 LXC容器,登录Proxmox宿主机shell执行以下操作:
- 调整内核全局参数,满足ES内存映射要求:
echo "vm.max_map_count=262144" >> /etc/sysctl.conf sysctl -p - 编辑对应LXC容器的配置文件,将
<CTID>替换为你实际的容器ID,编辑文件/etc/pve/lxc/<CTID>.conf,在文件末尾追加以下配置,放开容器需要的权限:features: keyctl=1,nesting=1 unconfined: 1
- 调整内核全局参数,满足ES内存映射要求:
- 启动LXC容器,登录Ubuntu系统执行以下操作:
- 手动修改ES的JVM堆配置,禁止自动按宿主机内存计算堆大小。堆内存设置规则为:不超过容器实际分配内存的50%,且最大值不超过31G。例如给容器分配8G内存时,堆设置为4G即可。编辑文件
/etc/elasticsearch/jvm.options,找到所有-Xms、-Xmx开头的配置行全部注释或删除,替换为计算好的堆值:-Xms4g -Xmx4g - 修复LXC环境下常见的ES目录权限异常问题:
chown -R elasticsearch:elasticsearch /var/lib/elasticsearch /var/log/elasticsearch /etc/elasticsearch - 重载系统服务配置,启动ES并设置开机自启:
systemctl daemon-reload systemctl enable --now elasticsearch
- 手动修改ES的JVM堆配置,禁止自动按宿主机内存计算堆大小。堆内存设置规则为:不超过容器实际分配内存的50%,且最大值不超过31G。例如给容器分配8G内存时,堆设置为4G即可。编辑文件
- 启动验证:在容器内执行
curl http://127.0.0.1:9200,返回包含ES版本号、集群名称的JSON信息即为启动成功。
注意:如果启动前有残留的Java失败进程,先执行
pkill java清理残留进程后再启动服务。
内容的提问来源于stack exchange,提问作者pundip
相关产品推荐
相关产品推荐

