更新时间:2026-11-04 GMT+08:00
分享

Notebook实例异常重启

问题现象

在Notebook详情页面的“事件”页签中,查看到容器被重启的事件信息。实例状态变为错误(Error)后自动恢复,或运行中的实例突然重启,或创建失败且显示JupyterProcessKilled、OOMKilled等。

定位方式

Notebook实例重启后,可通过以下步骤确认是否因资源耗尽(CPU、内存等)导致,以便对照下方原因逐项排查。

  1. 查看控制台监控,确认重启前资源使用情况。
    1. 在ModelArts管理控制台Notebook详情页的“监控”页签(或Jupyterlab资源监控),查看实例的CPU使用率、物理内存使用率等指标,辅助确认重启前是否存在资源耗尽。
      指标说明请参见Notebook实例资源使用情况和JupyterLab资源监控。
      图1 CPU使用率升高曲线示意(“监控”页签)
      图2 物理内存使用率升高曲线示意(JupyterLab资源监控)
    2. 登录Notebook实例,使用系统命令确认资源占用。

      命令

      说明

      top

      查看CPU使用率、物理内存使用率以及占用资源最高的进程。top默认按CPU占用排序,进入后按M键可按内存占用排序,快速定位高占用进程。

      free -h

      查看内存总量、已用/可用内存,确认是否接近规格上限。

      df -h /cache

      查看/cache目录使用量是否超过当前规格对应档位上限。

      ps aux --sort=-%cpu | head

      按CPU占用排序输出进程列表,辅助定位异常进程。

    3. 查看Notebook实例的事件信息,判断重启类型。

      在Notebook详情页的“事件”页签中查看具体事件,结合示例判断重启类型:

      • 事件显示JupyterProcessKilled:多为关键进程被清理,或自定义镜像配置问题,参见原因二和原因三。
        图3 JupyterProcessKilled事件示例
      • 事件显示OutOfMemory:多为内存超限,参见原因一。
        图4 OutOfMemory事件示例
      • 事件显示FailedToStartContainer(例如Failed to start container. Please contact SRE to check node...):容器启动失败,需联系SRE检查节点。
        图5 FailedToStartContainer事件示例

问题原因

可能导致Notebook实例自动重启的原因按用户行为分为以下三类,各条中标注了对应的触发机制:

  • 原因一:实例运行负载过高

    用户在Notebook实例中运行重型任务、加载大数据量等,导致资源耗尽或异常。按触发机制区分:

    • 内存不足触发OOM重建:运行代码时数据量过大、模型训练层数过多、/cache目录使用量超过实例规格对应档位上限等,导致容器内存使用量超过实例规格上限。容器会直接触发OOM机制终止并重建容器(事件显示OutOfMemory/OOMKilled),期间状态变为错误 (Error)。此类重启由资源层直接触发。
    • CPU超负荷导致健康检查失败:在开发环境中运行重型任务、执行高IO操作,导致CPU超负荷,关键进程响应变慢、无法通过心跳检测,系统判定不健康后触发自动重启。
    • 端口泄漏导致健康检查失败:用户程序未正确关闭网络连接或持续打开大量端口,导致端口资源耗尽,关键进程无法正常响应,健康检查失败后触发自动重启。关于如何查看端口泄漏,请参见问题定位。
  • 原因二:关键进程被清理

    用户手动终止(kill)JupyterLab、sshd、Code Server等关键进程时(事件显示JupyterProcessKilled),会导致健康检查失败,触发Notebook实例自动重启。

  • 原因三:自定义镜像配置问题导致创建失败触发重启

    自定义镜像存在以下配置问题,导致镜像在容器中无法正常启动关键进程,实例创建失败并反复重启:

    • 架构或类型不一致:在ModelArts镜像管理注册自定义镜像时,所选“架构”(ARM/x86)或“类型”与源镜像不一致。
    • 特殊环境变量配置:用户对镜像做了特殊配置,例如设置了BASH_ENV环境变量等,导致关键进程启动异常。

处理方法

  • 针对原因一(实例运行负载过高):
    • 重型任务迁移:将重型计算或训练任务迁移到训练环境执行,Notebook仅用于调试,避免资源超负荷。
    • 更换更高规格:如果当前规格无法满足需求,可将Notebook实例切换至更高规格,或新建更高规格的实例。具体操作,请参见变更Notebook实例运行规格和创建Notebook实例。
    • 减少并发量:降低并发量,控制资源消耗。
    • 合理使用存储目录:推荐使用/home/ma-user/work目录存储数据,避免/cache目录使用量超过当前实例规格对应的档位上限。
    • 排查端口泄漏:检查用户程序是否存在未关闭的网络连接或持续打开大量端口的情况,修复连接泄漏问题。
  • 针对原因二(关键进程被清理):

    排查进程异常:确认是否因用户手动终止(kill)了JupyterLab、sshd、Code Server等关键进程导致重启,避免手动清理关键进程。

  • 针对原因三(自定义镜像配置问题):

    排查自定义镜像:确认自定义镜像的“架构”(ARM/x86)和“类型”与源镜像保持一致,检查是否设置了BASH_ENV等特殊环境变量导致进程启动异常,修正后重新注册镜像再创建Notebook。详情请参见镜像注册与管理。

Notebook实例自动重启是系统自我修复机制,仅恢复实例运行状态,不解决根本原因。如果重启后仍重复出现异常,请按上述原因逐一排查。

相关文档