【问题标题】:Ubuntu server running out of memory when loading python app加载python应用程序时Ubuntu服务器内存不足
【发布时间】:2016-02-05 12:10:09
【问题描述】:

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

  • Google 新闻向量,用于 Word2vec(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 输出:

【问题讨论】:

  • 此问题缺少任何回溯或 Python 错误消息。
  • 我没有收到任何错误消息。它就像它仍在加载,但它需要永远......

标签: python ubuntu memory-management


【解决方案1】:

您的 Windows 机器和 Ubuntu 服务器之间的差异很可能是由页面文件 (Windows)/swappiness (Linux) 配置引起的。总而言之,交换是将内存的某些部分(最好是不那么重要的东西)存储到磁盘上,以便为其他需要内存的进程腾出空间。

现在,面向最终用户的 Windows 机器带有一个页面文件,即用于写入内存内容的文件,大小配置约为内存大小的 75%。但是 Ubuntu 服务器,AWS 浮现在脑海中,通常没有交换分区/文件和交换,即你的内存将被交换到磁盘的可能性,设置为 0,即根本没有。

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

NVM: 看来您已启用交换。

【讨论】:

  • 感谢您的回答,真的很有见地。问题是它不是我的服务器,不幸的是我不能这么容易地向它扔更多的内存。
  • 您可以增加交换大小,但这也无济于事,如果您使用的是旋转磁盘,也许使用 SSD 可能会有所帮助。如果适用,另一种可能的解决方案是对数据进行采样。 GoogleNewsVec 是经过训练的模型还是只是原始数据?最后,有一个叫zram 的东西,我在一台旧笔记本电脑上使用它供个人使用,并没有从中受益,但可能对你有用。
  • 非常感谢!!我安装了 zram-config 包并让它工作了!
猜你喜欢
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多