You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

大内存Jupyter Notebook执行命令后CPU占满100%的原因及解决办法

Jupyter Notebook高内存占用下CPU飙升问题的分析与解决

问题现象

  • 大型Notebook内存占用持续150GB以上
  • 执行任意命令(如1+1)后,虽能返回结果,但随即出现100% CPU占用,内存先升至230GB以上,再回落至150GB左右
  • 仅在得到结果后立即中断内核,才能执行下一条命令,但重复执行后仍会触发相同的CPU占满现象

版本信息

jupyter core     : 4.6.1
jupyter-notebook : 6.0.2
qtconsole        : 4.7.7
ipython          : 7.9.0
ipykernel        : 5.1.3
jupyter client   : 5.3.4
jupyter lab      : 1.1.4
nbconvert        : 5.6.1
ipywidgets       : 7.5.1
nbformat         : 4.4.0
traitlets        : 4.3.3
python           : 3.6.9

原因分析

  1. 垃圾回收(GC)触发:内存占用处于高位时,Python自动GC会触发全量对象扫描,尤其是存在大量大对象时,GC的遍历和清理过程会消耗极高CPU资源,同时为整理内存会出现临时内存飙升。
  2. Notebook状态序列化:Jupyter内核默认定期保存Notebook的变量状态、输出缓存等信息(自动检查点),当内存中存在大量大对象时,序列化整个状态的过程会占用大量CPU和临时内存。
  3. 输出缓存累积:Notebook会保存所有单元格的输出内容,随着执行次数增加,缓存的输出对象越来越多,每次执行后内核需要更新和维护这些缓存,带来额外性能开销。

解决办法

  • 禁用自动检查点:修改Jupyter配置文件(jupyter_notebook_config.py),添加配置:
    c.FileContentsManager.autosave_interval = 0
    
    避免每次执行后自动保存状态快照,减少序列化开销。
  • 手动管理内存与GC:
    • 对不再使用的变量,执行del var后手动调用gc.collect(),主动清理内存,避免自动GC在高负载时触发。
    • 调整GC阈值,减少触发频率(需权衡内存泄漏风险):
      import gc
      gc.set_threshold(500, 10, 10)
      
  • 清理输出与变量缓存:
    • 执行%reset -f快速清理所有全局变量(无需确认)。
    • 执行%xdel var删除指定变量并清理其对应的输出缓存。
    • 在Notebook设置中关闭"Save widget state in notebook"选项,减少额外状态存储。
  • 拆分大型Notebook:将单一大Notebook拆分为多个小Notebook,按任务模块拆分执行,降低单个内核的内存占用,从根源缓解压力。
  • 使用外部脚本执行:通过%run script.py命令运行外部Python脚本,避免大量变量累积在Notebook内核环境中。
  • 升级Jupyter版本:当前使用的版本较陈旧,新版本对内存管理、内核性能有针对性优化,升级至最新稳定版可有效缓解这类问题。
  • 限制内核资源:在配置文件中设置内核的内存上限,避免内存过度飙升:
    c.Spawner.mem_limit = '160G'
    
    注意内存上限需高于当前常规占用值,避免触发OOM(内存不足)错误。

内容的提问来源于stack exchange,提问作者user10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 16:01:47