【问题标题】:AWS EC2 instance seemed to self-destruct after moving NLTK data locationAWS EC2 实例在移动 NLTK 数据位置后似乎自毁
【发布时间】:2017-12-12 02:08:12
【问题描述】:

因此,我使用烧瓶前端构建了一个数据和 NLP 应用程序,该应用程序在本地完美运行,但是当我尝试按照我们建议的那样在 Apache 服务器后面的 AWS(Ubuntu linux)上进行设置时,开始出现大量问题(烧瓶不是为部署而设计的)。在这种设置下,python 模块的导入突然变成了一个相当大的挑战,在 Stackoverflow 上有很多关于它的问题。已经解决了其中大约 5 个问题,每次在整个代码中都使用大量 Python 日志记录语句来查看各种脚本究竟在什么时候崩溃或挂起(没有错误消息),然后它比以往任何时候都更进一步,这个问题关于 NLTK 语料库的位置出现了。不是 NLTK 模块,导入很好,只是语料库文件夹。

因此,这样做通常只需要以下代码:

import nltk
nltk.download()

这会打开一种用户界面,您可以在其中选择要下载的语料库或 NLP 项目以及是否更改目录以将其存储在其他地方。默认情况下,它会在您的主目录中创建目录nltk_data/ 并将其放入其中。

所以我起初认为问题是该文件夹需要 Apache 用户 www-data 的权限,但这不起作用。然后在 Apache 错误日志中注意到它查看了 4 个文件夹,但没有找到任何东西——其中一个是 /var/www/nltk_data,而没有一个是它实际所在的主目录。其他三个不记得了..

我在 Stackoverflow (1,2,3,4) 上查看了几个类似的问题,但决定选择更简单的问题。以下内容也是如此:

sudo mkdir /var/www/nltk_data
sudo cp -r nltk_data/   /var/www/

然后我再次刷新 Apache 日志,重新启动服务器并开始检查日志。它以通常的速度运行,需要几分钟才能完成脚本,正在重新检查日志,新的日志消息不断出现,然后一些关于内存的消息不断在 ssh 屏幕上重复,日志不再可见。我什么都打不出来。它让我退出,不允许我重新登录。进入 AWS 控制台,重新启动了两次。停止它,重新启动它,仍然无法登录。所以一怒之下,终止了它。很遗憾这样做,但如果您无法登录,则认为将其保留在那里没有任何意义。

问题:

  1. 是否可以将 nltk_data 目录复制到 Apache 正在查找的 /var/www 中,我应该再这样做吗?
  2. 如果 EC2 实例内存不足,它是否通常会严重杀死它,以至于即使在停止和启动它之后,您也无法再登录?
  3. 如果这种情况再次发生,从我的本地终端,有没有办法在“安全”模式下重新启动这个东西,这样我就可以进入那里并尝试撤消我所做的任何杀死它的事情? (而不仅仅是有效地删除整个内容)

现在可能会再做一次,重新创建实例,也许 4MB 内存不足以让我的应用程序和 Apache 一起使用,想知道这些事情的答案或任何其他相关提示,以便我下次必须这样做nltk 步骤..

【问题讨论】:

  • 我无法与 AWS 交谈,但 nltk_data 没有理由在 /var/www 之下。只需确保您的nltk 可以找到它,通过设置环境变量NLTK_DATA(或在您的应用程序中调整nltk.data.path,请参阅stackoverflow.com/questions/3522372/…
  • 如果 'import nltk` 工作正常(并且您也拥有所有依赖项),那么您链接到的四个问题中只有 1 是相关的——它没有答案。问题 3 在任何情况下都无关紧要。
  • 感谢您的回答并查看已发布的问题。同时发现 link 回答了我的一个问题 - 不幸的是,EC2 实例无法在安全模式下启动,恢复过程听起来不愉快。这次有一个更大的内存,以减少再次发生的机会,并会看看我什么时候达到那个点,如果我解决了 nltk 目录问题。

标签: python apache amazon-ec2 nltk mod-wsgi


【解决方案1】:

谢天谢地,我在设置一个新实例后解决了这个问题,方法如下:

sudo ln -sT /home/ubuntu/nltk_data  /usr/share/nltk_data

很高兴现在一切正常。一直在观察新实例上的top 系统监视器的输出,它比自毁的实例稍大,并注意到它从未使用超过大约 40% 的内存,但 CPU 长时间处于最大值主要脚本运行期间。也许这就是杀死较小实例的原因..

当我最初安装停用词时,它看起来如下: 查找错误:

**********************************************************************
  Resource 'corpora/stopwords' not found.  Please use the NLTK
  Downloader to obtain the resource:  >>> nltk.download()
  Searched in:
    - '/home/ubuntu/nltk_data'
    - '/usr/share/nltk_data'
    - '/usr/local/share/nltk_data'
    - '/usr/lib/nltk_data'
    - '/usr/local/lib/nltk_data'
**********************************************************************

然而,apache 日志显示它主要位于相同的地方,除了..

] [pid 19:tid 13] [client 77..]   Resource 'corpora/stopwords' not found.  Please use the NLTK
[Sat Jul 08 16:35:19.694759 2017] [wsgi:error] [pid 19437:tid 1..] [client 77..]   Downloader to obtain the resource:  >>> nltk.download()
[Sat Jul 08 16:35:19.694762 2017] [wsgi:error] [pid 19437:tid 1..] [client 77..]   Searched in:
[Sat Jul 08 16:35:19.694764 2017] [wsgi:error] [pid 19437:tid 1..] [client 77..]     - '/var/www/nltk_data'
[Sat Jul 08 16:35:19.694766 2017] [wsgi:error] [pid 19437:tid 1..] [client 77..]     - '/usr/share/nltk_data'
[Sat Jul 08 16:35:19.694768 2017] [wsgi:error] [pid 19437:tid 1..] [client 77..]     - '/usr/local/share/nltk_data'
[Sat Jul 08 16:35:19.694770 2017] [wsgi:error] [pid 19437:tid 1..] [client 77..]     - '/usr/lib/nltk_data'
[Sat Jul 08 16:35:19.694772 2017] [wsgi:error] [pid 19437:tid 1..] [client 77..]     - '/usr/local/lib/nltk_data'

所以我认为链接而不是复制更安全,而且使用 Apache 无论如何都在寻找的 /usr/share/ 目录而不是弄乱自己的目录。

【讨论】:

  • Apache 服务于/usr/share?你在那里失去了我。但很高兴听到你把它修好了。 (您引用的消息来自 nltk.data 库,而不是来自 Apache)。
  • 谢谢,我看了一下。正如您在 Apache 日志中看到的那样,Apache 在 5 个地方查找,不包括 nltk_data 实际所在的 1 个地方。我不认为 Apache 想要查看我的主目录更容易将一些东西放在它已经在寻找的地方。
猜你喜欢
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 2018-01-14
  • 2017-11-14
相关资源
最近更新 更多