我在加载一些数据的 Ubuntu 14.04 服务器上运行 python Flask 应用程序,主要的两件事是:
这一切都在大约 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 服务器之间的差异很可能是由页面文件 (Windows)/swappiness (Linux) 配置引起的。总而言之,交换是将内存的某些部分(最好是不那么重要的东西)存储到磁盘上,以为其他需要内存的进程腾出空间。
现在,面向最终用户的 Windows 机器带有一个页面文件,即用于写入内存内容的文件,大小配置约为内存大小的 75%。但是 Ubuntu 服务器,AWS 浮现在脑海中,通常没有交换分区/文件和交换,即你的内存将被交换到磁盘的可能性,设置为 0,即根本没有。
解决方案是设置交换文件和交换配置,或者在问题上投入更多内存。前一种解决方案将使您的应用程序像在 Windows 上一样工作。后者将永远解决它。
NVM:
看来您已启用交换。
关于python - 加载python应用程序时Ubuntu服务器内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35223911/