2010-02-13 2 views
6

Я хочу, чтобы мое приложение выбрасывало MemoryError, когда его использование превышает 1 ГБ. Я работаю в режиме демона WSGI.Как вы можете ограничить память в приложениях Django WSGI?

Я вижу 3 места может быть предел памяти:

  • apache.conf
  • WSGI где
  • конфигурации Джанго

, но я не могу найти правильные параметры конфигурации. В PHP вы можете сделать это с помощью:

php_value memory_limit 1GB

в вашем apache.conf

ответ

2

Использование resource.setrlimit() с resource.RLIMIT_VMEM.

+0

По какой-то причине ресурс не имеет этого в моей системе 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 '] 'Какие из этих констант означают одно и то же? –

+1

Возможно, вам удастся с 'resource.RLIMIT_RSS'. –

3

Ограничения памяти ресурсов не реализованы на большинстве платформ, хотя существуют определения API C. Таким образом, mod_wsgi не пытается реализовать такие ограничения. Если PHP это делает, он может сделать это благодаря тому, что это более ограниченная и контролируемая среда, чем Python.

Единственный переносной способ состоит в том, чтобы запустить отдельный процесс демона, который запускает «ps» или использует «/ proc» для мониторинга использования памяти процессами, а затем посылает сигнал SIGINT на те, которые переходят через некоторое предопределенное значение.


UPDATE

Version 3.4 mod_wsgi поддерживает опции для режима демона, который может быть в состоянии ограничить использование памяти. См:

работают ли они зависят от операционной системы, которую вы используете.

+0

yikes, это звучит грубо. Другие люди должны решить эту проблему слишком правильно? Есть ли стандартный демон для выполнения этой работы? –

Смежные вопросы