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

标签 python ubuntu memory-management

我在加载一些数据的 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 输出:

    enter image description here

    最佳答案

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

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

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

    NVM:
    看来您已启用交换。

    关于python - 加载python应用程序时Ubuntu服务器内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35223911/

    相关文章:

    python - 解析 Python 字典键

    python - 获取 Python 中的 Trac 项目列表

    python - PIL 对象中的属性错误

    objective-c - 使用 segue 设置详细 View Controller

    c - 如何维护结构定义与其构造/销毁代码之间的相关性?

    python - 定义具有大量属性的 Python 类 - 样式

    perl - 在 Ubuntu 中的 postgres-9.4 上安装 perl 扩展时出错

    python - 在 Ubuntu 中找不到(但已安装)模块

    ubuntu - SSH EC2 Linux 实例的默认用户名是什么?

    python - 进程内存使用输出