最常用方法是用psutil获取当前Python进程RSS内存占用并转为MB:import psutil; process = psutil.Process(); print(f"当前内存占用: {process.memory_info().rss / 1024 / 1024:.1f} MB");也可启用Jupyter内置资源面板,需配置c.ResourceUseDisplay.track_memory = True并重启服务。

直接在 Notebook 里看当前进程内存
最常用的方法是用 psutil 获取当前 Python 进程的 RSS(实际物理内存占用),单位是字节,转成 MB 更直观:
import psutil
process = psutil.Process()
print(f"当前内存占用: {process.memory_info().rss / 1024 / 1024:.1f} MB")注意:rss 是 Resident Set Size,反映真实占用;vms(虚拟内存)通常更大、参考价值低。这个值不包含内核其他子进程(比如 subprocess 启动的命令),只算当前 notebook 主进程。
启用 Jupyter 内置资源监控面板
Jupyter Notebook(7+)和 JupyterLab 默认支持内存显示,但需开启配置:
- 编辑
~/.jupyter/jupyter_server_config.py - 加入这两行:
c.ResourceUseDisplay.track_memory = Truec.ResourceUseDisplay.memory_limit = 4 * 1024**3(设为 4GB,按需调整) - 重启 Jupyter Server 后,右上角会多出一个内存/ CPU 使用率小面板
这个面板显示的是整个内核进程的内存(含子进程),比纯 psutil 更全面,但依赖内核正确上报——某些自定义内核或远程 kernel 可能不支持。
排查“内存没释放”问题:变量、缓存、GPU 显存都要清
执行 gc.collect() 并不能自动清理所有东西,常见漏点:
- 大变量没
del:显式删掉df、model、tensor等对象再调gc.collect() - Matplotlib 缓存:多次绘图后调
plt.close('all'),否则 figure 对象驻留内存 - TensorFlow/PyTorch GPU 显存:CPU 内存降了,GPU 显存可能还在涨。PyTorch 要
torch.cuda.empty_cache();TF 1.x 需设config.gpu_options.allow_growth = True - Jupyter 输出缓存:长输出(如大数组 print)会存在 cell output 中,用
%%capture或手动清空 output
磁盘空间不足也会被误报为“内存问题”
当 No space left on device 报错出现时,Jupyter 常常卡死、内核无响应,看起来像内存爆了,其实是磁盘满了:
- 检查回收站:
du -sh ~/.local/share/Trash或du -sh /home/ma-user/work/.Trash-1000/ - Conda 包缓存:
du -sh ~/miniconda3/pkgs/,可安全执行conda clean -a - 临时文件:
find /tmp -user $(whoami) -type f -mtime +7 -delete
真正难定位的是那些看不见的“隐性占用”:比如后台仍在运行的旧内核、挂起的 screen 或 tmux 会话、或 Docker 容器残留卷——它们不显示在 psutil 里,但吃光系统资源。


















