【问题标题】:How can you force a memory limit in Django WSGI apps?如何在 Django WSGI 应用程序中强制限制内存?
【发布时间】:2010-02-13 22:18:46
【问题描述】:

我希望我的应用在使用量超过 1GB 时抛出 MemoryError。我在 WSGI 守护进程模式下运行。

我看到 3 个地方的内存限制可能是:

  • apache.conf
  • wsgi 某处
  • django 配置

但我找不到正确的配置选项。在 PHP 中,你可以这样做:

php_value memory_limit 1GB

在你的apache.conf

【问题讨论】:

    标签: django apache memory memory-management mod-wsgi


    【解决方案1】:

    即使存在 C API 定义,大多数平台也没有实现资源内存限制。因此,mod_wsgi 不会尝试实施此类限制。如果 PHP 正在这样做,那么它能够这样做是因为它是一个比 Python 更受约束和受控的环境。

    唯一可移植的方法是运行一个单独的守护进程,它运行“ps”或使用“/proc”来监控进程的内存使用情况,然后向超过某个预定义值的进程发送 SIGINT 信号。


    更新

    mod_wsgi 3.4 版支持守护程序模式的选项,这些选项可能能够限制内存使用。见:

    它们是否工作取决于您使用的操作系统。

    【讨论】:

    • 哎呀,这听起来很粗糙。其他人也必须解决这个问题吧?是否有标准的守护进程来完成这项工作?
    【解决方案2】:

    【讨论】:

    • 由于某种原因,资源在我的 debian 系统 (python 2.5) 上没有该资源 >>> dir(resource) ['RLIMIT_AS', 'RLIMIT_CORE', 'RLIMIT_CPU', 'RLIMIT_DATA', 'RLIMIT_FSIZE', 'RLIMIT_MEMLOCK', 'RLIMIT_NOFILE', 'RLIMIT_NPROC', 'RLIMIT_OFILE', 'RLIMIT_RSS', 'RLIMIT_STACK', 'RLIM_INFINITY', 'RUSAGE_CHILDREN', 'RUSAGE_SELF', '__doc__', '__file__', '__name__', '__package__', 'error', 'getpagesize', 'getrlimit', 'getrusage', 'setrlimit', 'struct_rusage'] 这些常量中的哪一个具有相同的含义?
    • 你可能会选择resource.RLIMIT_RSS
    猜你喜欢
    • 1970-01-01
    • 2018-11-03
    • 2015-11-06
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    相关资源
    最近更新 更多