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分块读取:
分块读取会把大文件拆成小批量读取,避免瞬间IO过载。import pandas as pd chunk_iter = pd.read_csv("housing.csv", chunksize=100) df = pd.concat(chunk_iter)
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
相关产品推荐
相关产品推荐

