当我在PyCharm中手动停止脚本时,进程以退出代码137结束。但是我没有停止脚本。仍然收到了退出代码137。问题出在哪里?
Python版本为3.6,在运行xgboost.train()方法时进程结束。
退出码 137 表示你的进程被 (信号 9) SIGKILL
杀死。如果是你手动停止的话,那就是答案了。
如果你没有手动停止脚本,但仍然收到此错误代码,则表示脚本被你的操作系统杀死了。在大多数情况下,这是由于内存使用过多引起的。
{根据我的经验}
这是由于内存问题。当我尝试使用全数据集使用sklearn fit训练机器学习模型时,它会突然中断并给出错误信息,但使用小数据集则可以正常工作。
进程以退出码137(被信号9:SIGKILL中断)结束有趣的是,这也没有在异常块中捕获到。
如果您正在使用Ubuntu,请增加SWAP内存,它会起作用。使用htop查看SWAP使用情况,当SWAP满时,会给出错误代码137。
问题并不总是出在内存上。在我的情况下,使用了subprocess.Popen
,它抛出的错误代码为137,看起来像是信号KILL,而原因绝对不是内存利用率,因为在运行时几乎没有使用1%的内存。经过更多的调查,这似乎是一个权限问题。我只是将脚本从/home/ubuntu
移动到根目录。
在我的情况下,无论是实际内存还是虚拟内存都已经用完。
将您的数据拆分成小块或扩展虚拟内存。
我选择后者。
以下脚本适用于我的Ubuntu 20.04 TLS。
# disable the use of swap
sudo swapoff -a
# create the SWAP file. Make sure you have enough space on the hard disk.
# here is my size, the total size is bs*count B
sudo dd if=/dev/zero of=/swapfile bs=1024 count=136314880 status=progress
# output:
# 139458259968 bytes (139 GB, 130 GiB) copied, 472 s, 295 MB/s
# 136314880+0 records in
# 136314880+0 records out
# 139586437120 bytes (140 GB, 130 GiB) copied, 472.372 s, 296 MB/s
# Mark the file as SWAP space:
sudo mkswap /swapfile
# output:
# Setting up swapspace version 1, size = 130 GiB (139586433024 bytes)
# no label, UUID=25a565d9-d19c-4913-87a5-f02750ab625d
# enable the SWAP.
sudo swapon /swapfile
# check if SWAP is created
sudo swapon --show
# output:
# NAME TYPE SIZE USED PRIO
# /swapfile file 130G 0B -2
# Once everything is set, you must set the SWAP file as permanent, else you will lose the SWAP after reboot. Run this command:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
我也遇到了同样的错误。在我的情况下,这与过多的内存使用有关。清除缓存数据后重置解决了问题,并为每个不再使用的变量添加以下代码:
MyVariableName = None
del myVariableName
来清除这个变量。这会使它不再在作用域内,并导致被垃圾回收。 - Jonno_FTW最近在M1 Mac Mini上安装PyCharm时,我遇到了这个错误。编译项目时出现"SDK无效"的错误提示。后来发现这是由于Python解释器指向一个奇怪的目录造成的,我不确定如何发生的。
我进入偏好设置 > 项目名称:你的项目名称 > Python 解释器并从下拉列表中选择了一个有效的SDK(在我的情况下是Python 3.8)。你将知道包是否有效,因为它将在下面的包列表中填充包内容。
虽然我不确定这个问题是如何发生的,但这样做解决了问题。
根据我的经验(Python 3.9.13,MacOSX 12.4),如果Python代码导致内存不足,"SIGKILL"行为也可能发生。如果您从命令行运行相同的代码
$>python your_module.py
代码也会崩溃。
我使用相当大的Pandas DataFrame
(数百万行,几十列)。我有一台8 GB RAM的MacMini,并观察到如果Python消耗的内存(MacOS活动监视器)超过约60 GB,则会出现SIGKILL。
我的Python进程因为Docker for Windows内存限制设置得太低而被杀死,错误代码为137。
SIGKILL
(信号9)杀死。这可能会发生很多原因,但通常是由于过度的内存使用引起的。 - umutto