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

Python机器学习代码导致Ubuntu 20.04冻结重启问题求助

排查思路与解决尝试

1. 磁盘IO相关问题排查

既然读数据集都会崩,逐步执行却没事,大概率是短时间高IO触发了硬件保护机制或者系统IO调度的bug:

  • 切换磁盘IO调度器:Ubuntu 20.04默认用mq-deadline,换成noop试试。先执行echo noop | sudo tee /sys/block/sda/queue/scheduler(把sda换成你的磁盘设备名,用lsblk查看),再跑脚本测试。如果有效,永久设置:编辑/etc/default/grub,在GRUB_CMDLINE_LINUX_DEFAULT里加elevator=noop,然后sudo update-grub重启。
  • 模拟批量磁盘读取:用dd if=/path/to/your/dataset.csv of=/dev/null bs=4M测试,看会不会触发崩溃。如果会,说明是磁盘硬件或驱动问题,更新对应驱动(比如NVMe磁盘查厂商驱动),或者用smartctl -a /dev/sda检查磁盘健康状态。

2. 电源管理与BIOS设置调整

虽然acpi=off没用,但可以试试其他电源相关参数:

  • 编辑/etc/default/grub,在GRUB_CMDLINE_LINUX_DEFAULT里添加pci=noacpi或apm=off,更新grub后重启测试。
  • 进BIOS关闭节能选项:比如CPU C-state、Power Saving Mode,部分主板在短时间高负载(哪怕是IO负载)下会误触发过热保护或电源重置。

3. 调整代码读取节奏

既然加sleep(1)就正常,放慢IO节奏就能规避问题,可以修改读取逻辑:

  • 逐行读取加极小延迟:
    import time
    data = []
    with open("housing.csv", "r") as f:
        header = f.readline()
        for line in f:
            data.append(line.strip())
            time.sleep(0.001)  # 几乎不影响效率,却能降低瞬间IO压力
    # 后续处理逻辑
    
  • Pandas分块读取:
    import pandas as pd
    chunk_iter = pd.read_csv("housing.csv", chunksize=100)
    df = pd.concat(chunk_iter)
    
    分块读取会把大文件拆成小批量读取,避免瞬间IO过载。

4. OOM机制排查

虽然你说内存监控正常,但可以检查OOM killer日志:

  • 执行dmesg | grep -i oom,看有没有OOM触发的记录。有时候内存没占满,但连续大内存申请也会触发内核的OOM保护。
  • 临时关闭内存过度提交限制:echo 1 | sudo tee /proc/sys/vm/overcommit_memory,再跑脚本测试是否还崩溃。

5. Python环境排查

  • 换Python版本测试:比如切换到3.8/3.9,重新强制安装依赖:pip install --force-reinstall pandas scikit-learn,排除依赖包底层bug。
  • 用纯Python原生读取(不用Pandas)写简化测试代码,看是否还崩溃,定位是Pandas问题还是系统层面问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:20:19