You need to enable JavaScript to run this app.
导航

CentOS 6.X 镜像运行异常退出问题排查

最近更新时间2023.02.02 11:47:20

首次发布时间2023.01.31 16:43:40

问题描述

在容器服务中运行 CentOS 6.X 版本镜像或运行以 CentOS 6.X 版本为基础镜像的业务镜像时,Pod 状态一直为ErrorExit Code139(分段错误 SIGSEGV)。
alt

问题原因

CentOS 6.X 版本镜像依赖系统的 vsyscall 机制,而容器服务中的 Worker 节点使用 vDSO 机制,默认不开启 vsyscall,因此运行 CentOS 6.X 版本镜像或运行以 CentOS 6.X 版本为基础镜像的业务镜像时报错。

vsyscall 和 vDSO 相关介绍,请参见 On vsyscalls and the vDSO

解决方法

方法一(推荐)

基于 CentOS 7.X 版本或 CentOS 8.X 版本重新构建(build)镜像。

方法二

如果您无法基于 CentOS 7.X 版本或 CentOS 8.X 版本重新构建镜像,必须基于 CentOS 6.X 版本来运行业务镜像时,需要使用本方法打开容器服务 Worker 节点的 vsyscall 机制。

  1. 登录 Worker 节点。详细操作,请参见 ECS Terminal
  2. 备份 grub 文件。
    cp /etc/default/grub /etc/default/grub.bak
    
  3. 编辑 grub 文件,在GRUB_CMDLINE_LINUX_DEFAULT字段处添加vsyscall=emulate并保存 grub 文件。
    vi /etc/default/grub
    
    alt
  4. 重启 Worker 节点。
    update-grub2 && sync && reboot
    
  5. 检查 vsyscall 是否成功启用。
    cat /proc/self/maps | egrep 'vdso|vsyscall'
    
    返回类似如下信息,表示容器服务的 vsyscall 已启用。
    alt
  6. 重新运行 CentOS 6.X 版本镜像或以 CentOS 6.X 版本为基础镜像的业务镜像。

方法三

如果您无法使用 CentOS 7.X 版本或 CentOS 8.X 版本作为基础镜像,需要继续使用 CentOS 6.X 版本,请确认 CentOS 6.X 版本镜像中的 glibc 版本是否低于 2.14。如果是,请升级 glibc 版本到 2.14 及以上版本。

如果使用上述三个方法仍未解决您的问题,请 提交工单 获取技术支持。