在PyCharm中以退出码137完成的进程

113

当我在PyCharm中手动停止脚本时,进程以退出代码137结束。但是我没有停止脚本。仍然收到了退出代码137。问题出在哪里?

Python版本为3.6,在运行xgboost.train()方法时进程结束。


16
内存使用怎么样?退出码137表示您的进程被SIGKILL(信号9)杀死。这可能会发生很多原因,但通常是由于过度的内存使用引起的。 - umutto
@Pang 对于混淆感到抱歉。这是由于脚本使用过多内存而结束的。 - shawe
3
脚本似乎用尽了内存。经过优化脚本,它现在能够正常工作了。非常感谢。 - shawe
2
@shawe,您能告诉我们您做了什么更改来解决这个问题吗? - Rajat
@shawe 请分享您的解决方案。 - naraghi
显示剩余2条评论
12个回答

136

退出码 137 表示你的进程被 (信号 9) SIGKILL 杀死。如果是你手动停止的话,那就是答案了。

如果你没有手动停止脚本,但仍然收到此错误代码,则表示脚本被你的操作系统杀死了。在大多数情况下,这是由于内存使用过多引起的。


21

{根据我的经验}

这是由于内存问题。当我尝试使用全数据集使用sklearn fit训练机器学习模型时,它会突然中断并给出错误信息,但使用小数据集则可以正常工作。

进程以退出码137(被信号9:SIGKILL中断)结束有趣的是,这也没有在异常块中捕获到。


3
它没有被捕获是因为它不是Python异常。 - Idodo
1
那么如何解决呢? - MAC

15

如果您正在使用Ubuntu,请增加SWAP内存,它会起作用。使用htop查看SWAP使用情况,当SWAP满时,会给出错误代码137。


11
欢迎来到stackoverflow。你的回答很有用。感谢你的贡献。可以改进你的回答的几个方面是:添加htop手册和解释如何增加SWAP内存的页面链接,或者在这里自己解释这些内容。无论哪种方式,感谢你的贡献。我会给你点赞。 - Elegant Code

5

问题并不总是出在内存上。在我的情况下,使用了subprocess.Popen,它抛出的错误代码为137,看起来像是信号KILL,而原因绝对不是内存利用率,因为在运行时几乎没有使用1%的内存。经过更多的调查,这似乎是一个权限问题。我只是将脚本从/home/ubuntu移动到根目录。


5

在我的情况下,无论是实际内存还是虚拟内存都已经用完。

将您的数据拆分成小块或扩展虚拟内存。

我选择后者。

以下脚本适用于我的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

在运行进程之后,内存会增长。
这是我的: enter image description here 祝好运!
参考资料: reference 1reference 2

5

我也遇到了同样的错误。在我的情况下,这与过多的内存使用有关。清除缓存数据后重置解决了问题,并为每个不再使用的变量添加以下代码:

MyVariableName = None

1
请问您能否详细说明一下?您的意思是应该插入一行字面代码,比如“MyValue = None”吗? - John Strong
我重新编辑了我的答案。对于每个我不再使用的变量,我添加了“你的变量名称”=None。这将重置您的变量并释放缓存。 - Camilo
8
你应该使用 del myVariableName 来清除这个变量。这会使它不再在作用域内,并导致被垃圾回收。 - Jonno_FTW

3

最近在M1 Mac Mini上安装PyCharm时,我遇到了这个错误。编译项目时出现"SDK无效"的错误提示。后来发现这是由于Python解释器指向一个奇怪的目录造成的,我不确定如何发生的。

我进入偏好设置 > 项目名称:你的项目名称 > Python 解释器并从下拉列表中选择了一个有效的SDK(在我的情况下是Python 3.8)。你将知道包是否有效,因为它将在下面的包列表中填充包内容。

虽然我不确定这个问题是如何发生的,但这样做解决了问题。


0

根据我的经验(Python 3.9.13,MacOSX 12.4),如果Python代码导致内存不足,"SIGKILL"行为也可能发生。如果您从命令行运行相同的代码

$>python your_module.py

代码也会崩溃。

我使用相当大的Pandas DataFrame(数百万行,几十列)。我有一台8 GB RAM的MacMini,并观察到如果Python消耗的内存(MacOS活动监视器)超过约60 GB,则会出现SIGKILL。


0
  1. 如果有人在Mac上安装PyCharm时,在执行一个简单的print('test')命令时出现代码137的PyCharm错误,那么很可能是由于新创建的项目中存在解释器路径。
  2. 我认为这个错误是因为python是通过brew安装的,而它没有显示在“Python X.YZ /Library/Frameworks/Python.framework/Versions/X.YZ/bin/pythonX”路径中。
  3. 通过卸载已安装的python版本然后手动安装来解决问题。
  4. 现在它将显示在解释器路径下,该路径位于“首选项->项目->Python解释器->齿轮符号->添加基本解释器”,将其指向/Library/Frameworks/...路径下。

0

我的Python进程因为Docker for Windows内存限制设置得太低而被杀死,错误代码为137。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接