移动NLTK数据位置后,AWS EC2实例似乎会自毁

时间:2017-07-07 17:20:29

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

所以我构建了一个带有烧瓶前端的数据和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,并且它们都不是实际所在的主目录。不记得其他3 ..

我在Stackoverflow上查看了几个类似的问题(1234),但我决定采用更简单的方法。以下是:

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. 如果这种情况再次发生,从我的本地终端,有没有办法在“安全”模式下重新启动这个东西,所以我可以进入那里并试图撤消我杀死它的任何东西? (而不仅仅是有效地删除整个事物)
  4. 现在可能还有另外一个,重新创建实例,也许4MB ram还不足以让我的应用和Apache一起,想知道这些事情的答案或任何其他相关提示,以便我下次必须这样做nltk step ..

1 个答案:

答案 0 :(得分:0)

所以我在设置一个新实例后谢天谢地解决了这个问题,以下是:

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

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

当我最初安装停用词时,它看起来像这样: LookupError:

**********************************************************************
  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/目录而不是弄乱自己的目录。