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

Ubuntu中曾正常运行的Python脚本自动终止问题求助

问题排查与解决方案

一、排查并恢复分页(交换空间)

检查交换空间状态

  • 查看当前启用的交换空间:
    swapon --show
    
    无输出则表示交换空间未启用;也可以通过cat /proc/swaps查看,若结果为空则确认未启用。
  • 查找系统中存在的swap分区/文件:
    • 找swap分区:lsblk,查看TYPE为swap的条目
    • 找swap文件:find / -name "swapfile"

恢复已存在的交换空间

  • 若为swap分区,启用并设置开机自动挂载:
    sudo swapon /dev/sdXn  # 替换为你的swap分区路径,比如/dev/sda3
    
    编辑/etc/fstab,确保存在以下行(无则添加):
    /dev/sdXn none swap sw 0 0
    
  • 若为swap文件,启用并设置开机自动挂载:
    sudo swapon /swapfile
    
    编辑/etc/fstab,确保存在以下行(无则添加):
    /swapfile none swap sw 0 0
    

新建交换空间(若原本无swap)

# 创建16G大小的swap文件(可根据需求调整,比如8G/32G)
sudo fallocate -l 16G /swapfile
# 设置权限防止其他用户访问
sudo chmod 600 /swapfile
# 格式化为swap格式
sudo mkswap /swapfile
# 启用swap
sudo swapon /swapfile
# 添加到fstab,开机自动挂载
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

二、脚本层面内存优化(根治内存耗尽问题)

既然Windows原本就触发内存错误,Ubuntu更新后也扛不住,说明脚本内存占用过高,需从逻辑上优化:

  • 分批处理数据:避免一次性加载所有文本到内存,改用生成器逐批读取、处理,每批处理完成后释放内存。
  • 优化词袋生成参数:
    • 使用sklearn.feature_extraction.text.CountVectorizer时,设置max_features=N(比如N=10000),只保留高频词汇,减少特征维度。
    • 限制ngram_range范围,比如从(1,3)改为(1,2),降低特征数量。
    • 改用HashingVectorizer替代CountVectorizer:无需存储完整词汇表,内存占用极低,适合大规模文本数据。
  • 定位并修复内存泄漏:安装memory-profiler排查内存热点:
    pip install memory-profiler
    python -m memory_profiler your_script.py
    
    在循环关键节点手动调用gc.collect()强制回收内存。
  • 使用高效数据结构:用NumPy数组替代Python列表存储词袋矩阵,大幅降低内存开销。

三、系统层面辅助调整

  • 调整OOM Killer行为:编辑/etc/sysctl.conf,添加:
    vm.overcommit_memory=1
    
    执行sudo sysctl -p生效,该参数允许系统超额分配内存,降低脚本被直接杀掉的概率。
  • 释放系统内存:关闭闲置的浏览器标签、后台服务、IDE插件,用htop查看高内存进程并终止。

附:Windows下MemoryError处理建议

  • 启用64位Python:32位Python内存上限约2GB,切换为64位版本可突破此限制。
  • 调整虚拟内存:右键「此电脑」→「属性」→「高级系统设置」→「性能」→「设置」→「高级」→「虚拟内存」,勾选「自动管理所有驱动器的分页文件大小」,或手动设置更大的分页文件(如32GB)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:57:23