普通用户运行etcd报内存预留错误,root账户正常求解决
问题分析与解决方案
这个错误是Go语言运行时初始化内存分配器时,无法预留足够虚拟内存用于页摘要(page summary)导致的。普通用户账户的虚拟内存资源限制远低于root账户,因此触发了该问题。
解决步骤
1. 确认普通用户的资源限制
执行以下命令查看当前普通用户的内存限制:
ulimit -a
重点关注virtual memory (kbytes, -v)项,普通用户的限制会显示为1048576(对应1GB),而root账户通常是unlimited。
2. 调整普通用户的虚拟内存限制
临时调整(当前会话有效)
在普通用户终端执行:
ulimit -v unlimited
或者设置一个足够大的数值(比如4GB):
ulimit -v 4194304
永久调整(系统重启后依然有效)
编辑/etc/security/limits.conf文件,添加以下内容(将your_username替换为实际的普通用户名):
your_username soft as unlimited your_username hard as unlimited
保存后退出,重新登录普通用户账户即可生效。
3. 优化etcd的内存配置
在受限环境中,建议给etcd和Go运行时设置合理的内存上限:
- 设置Go运行时内存限制:
export GOMEMLIMIT=4G - 启动etcd时添加内存相关参数:
其中etcd --quota-backend-bytes=2147483648 --max-request-bytes=1048576--quota-backend-bytes限制后端存储的最大大小(示例为2GB),--max-request-bytes限制单个请求的大小(示例为1MB),可根据实际需求调整。
4. 验证修复效果
重新用普通用户账户启动etcd,检查是否再出现failed to reserve page summary memory错误。
内容的提问来源于stack exchange,提问作者Sreejith K
相关产品推荐
相关产品推荐

