【问题标题】:Cannot allocate memory on Popen commands无法在 Popen 命令上分配内存
【发布时间】:2012-03-27 22:55:16
【问题描述】:

我有一个 Ubuntu 11.10 64 位的 VPS 服务器,有时当我执行 subprocess.Popen 命令时,我得到太多这个错误:

OSError: [Errno 12] 无法分配内存

配置详情: 对于每个站点,我都有一个这样的 apache 站点:http://pastebin.com/mcew79sH 还有一个设置和一个 wsgi 文件(都在与项目相同的文件夹中),如下所示:http://pastebin.com/hrrV4WTM

我将参数作为列表传递给 Popen 构造函数并使用 close_fds=True,我还使用 stdin/stdout 与 PIPE 进行通信,以获取我需要读取响应的那些。

最后这是我出现错误时得到的回溯http://pastebin.com/FqXPHwhq

服务器服务于大约 25 个流量较小的站点(其中可能有 5 个日常使用量很大)我的 VPS RAM 大小为 1024MB,它们都执行 PostgreSQL 数据库。

这一切始于我们将站点从运行 Ubuntu Server 10.10 32 位的 VPS 迁移到 11.10 64 位。

知道如何解决这个问题吗?

---- 编辑----

ps aux --> http://synsa.synsa.com/site_media/process.txt

【问题讨论】:

  • 我认为 1024MB 对于少于 50 个流量不是很高的网站来说已经绰绰有余了,也许是时候为 apache 寻找更便宜的替代品了。

标签: python django apache mod-wsgi popen


【解决方案1】:

一些 VPS 提供商以奇怪的方式计算内存限制。看看有没有描述:

http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Memory_Constrained_VPS_Systems

完全有帮助。

【讨论】:

  • 主要问题是每个站点消耗的 RAM 比我计划的要多得多,即使该站点甚至没有被访问过。
【解决方案2】:

嗯,这很容易。听起来是时候升级您的 vps 或缩减 postgres/apache/etc 的内存设置并承受由此产生的性能损失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-16
    • 2019-03-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    相关资源
    最近更新 更多