ubuntu 在aws中被杀错误,但在Mac中工作

wixjitnu  于 2023-03-17  发布在  Mac
关注(0)|答案(2)|浏览(131)

当我尝试在aws ubuntu示例中运行下面的pickle程序时,我收到了“killed”消息,并且它没有生成pickle。然而,当我在本地机器(Mac)中尝试运行它时,情况也是如此。我使用python3来运行程序:

import nltk
import random
from nltk.classify.scikitlearn import SklearnClassifier
import pickle
from nltk.tokenize import word_tokenize

documents_f = open("documents.pickle", "rb")
documents = pickle.load(documents_f)
documents_f.close()

word_features5k_f = open("word_features5k.pickle", "rb")
word_features = pickle.load(word_features5k_f)
word_features5k_f.close()

def find_features(document):
    words = word_tokenize(document)
    features = {}
    for w in word_features:
        features[w] = (w in words)
    #print (features)
    return features

featuresets = [(find_features(rev), category) for (rev, category) in documents]
save_featuresets = open("featuresets.pickle","wb")
pickle.dump(featuresets, save_featuresets)
save_featuresets.close()

我相信这可能是由于内存问题,因为我正在使用aws免费轮胎。有人请让我知道如何解决这个问题?
发布日期:

$ python3 my_pickle.py
Killed
bakd9h0s

bakd9h0s1#

您的EC2示例内存不足,并且您的进程正在被the OOM killer终止。
升级到更大的示例类型,或者找到一种方法使进程使用更少的内存。(例如,您可能希望考虑一次处理一个文档,而不是一次加载所有文档。)

nzk0hqpo

nzk0hqpo2#

您可以使用以下命令检查在ec2示例上遇到的错误:

$ sudo dmesg -e

很可能是“内存不足”错误。要解决此问题,而不是升级ec2示例计算资源,您可以尝试以下修复。
可以通过在示例上分配交换空间来启用分页。使用以下命令启用交换:

$ sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
$ sudo /sbin/mkswap /var/swap.1
$ sudo chmod 600 /var/swap.1
$ sudo /sbin/swapon /var/swap.1

上面的命令将分配1GB的交换空间,如果你想要更多的空间,我建议分配4096(4GB)。
需要注意的一点是,swap在每次重新启动后默认是不启用的,这意味着如果你重新启动ec2示例,你之前分配的交换空间将会消失。
为了解决这个问题,我们在每次示例重新启动后默认启用交换。

sudo chmod 777 /etc/fstab
nano /etc/fstab

检查文件中是否存在以下行:

/var/swap.1   swap    swap    defaults        0   0

如果没有,添加它。保存对文件的write修改并重新运行你的python代码。在中间插入print语句以检查你的代码在执行过程中是如何进行的。

相关问题