繁体   English   中英

加载python应用程序时Ubuntu服务器内存不足

[英]Ubuntu server running out of memory when loading python app

我正在Ubuntu 14.04服务器上运行python Flask应用程序,并在其中加载了一些数据,主要两件事是:

  • 与Word2vec一起使用的Google新闻矢量(GoogleNewsVec约为4GB)

  • 350MB JSON数据文件

所有这些都将在约5分钟内加载到我的本地Windows计算机上,该计算机具有与服务器类似的规格(8GB RAM)。 奇怪的是,两个部分分别加载良好。 因此,当我这样做时:

load_word2vec_model()
load_json_data()

它将很快地加载模型并卡在load_json_data()处:

[13:16:55] Loading model..
[13:17:13] Finished loading model.
[13:17:13] Loading scores..
[13:17:13] Loading scores dict from json file..

但是当我以相反的顺序进行操作时:

load_json_data()
load_word2vec_model()

它在加载word2vec模型时陷入困境:

[13:20:29] Loading scores..
[13:20:29] Loading scores dict from json file..
[13:22:42] Finished loading from json file.
[13:22:42] Finished loading scores.
[13:22:42] Loading model..

我没有收到任何python错误消息。 这使我相信服务器以某种方式达到了最大值。 内存使用情况,并且不会加载整个模型。

在我的本地Windows计算机上,它确实会占用大量内存,但最终它将加载(总共约5分钟)。 为什么在服务器上没有发生这种情况,我已经等待了一个小时,但它从未加载。

这是服务器的htop输出:

在此处输入图片说明

Windows计算机和Ubuntu服务器之间的差异很可能是由pagefile(Windows)/ swappiness(Linux)配置引起的。 综上所述,交换是将内存的某些部分(最好是不太重要的部分)存储到磁盘上,以便为其他一些需要内存的进程留出空间。

现在,面向最终用户的Windows计算机附带了一个页面文件,即用于写入内存内容的文件,其大小配置约为内存大小的75%。 但是,想到AWS,Ubuntu服务器通常没有交换分区/文件和交换能力,即您的内存将交换到磁盘的可能性(设置为0,即完全没有)。

解决方案是设置交换文件和swappiness配置,或在此问题上投入更多内存。 前一种解决方案将使您的应用程序像在Windows上一样工作。 后者将永远解决它。

NVM:似乎您已启用交换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM