Следующая проблема происходит на машине под управлением Ubuntu 10.04 с 2.6.32-22-универсальным ядром: Установление предела для Размера резидентного набора (RSS) процесса, кажется, не имеет эффекта. Я в настоящее время устанавливал предел в Python со следующим кодом:
import resource
# (100, 100) is the (soft, hard) limit. ~100kb.
resource.setrlimit(resource.RLIMIT_RSS, (100, 100))
memory_sink = ['a']*10000000 # this should fail
Список, memory_sink, успешно выполняется каждый раз. Когда я проверяю использование RSS с вершиной, я могу легко заставить процесс использовать 1 ГБ RAM, что означает, что предел не работает. Разве пределы RSS не работают с этим ядром или дистрибутивом? Если это помогает, ресурс. RLIMIT_NPROC (предел пользовательского процесса) действительно работает.
Формируем manpage getrlimit:
RLIMIT_RSS Указывает предел (в страницах) резидентного набора процесса (количество виртуальных страниц, находящихся в оперативной памяти). Это ограничение действует только в Linux 2.4.x, x < 30, и влияет только на вызовы madvise(2) с указанием MADV_WILLNEED.
Похоже, что в ядре Linux 2.6 это просто не поддерживается.