Python на MacOS полностью игнорирует rlimit
Мой процесс Python в MacOS полностью игнорирует ограничения, ниже которых я установил. (Я подтвердил печатью, что они были установлены)
Использование физической памяти превышает 2,4 ГБ, после чего загрузка ЦП падает на << 5% и зависает.
(Основной виновник, кажется, выделение массива, но я не могу заставить OutOfMemory
исключение, чтобы точно определить, где, так что я застрял). В чем дело? Я думал, что жесткие ограничения не могут быть проигнорированы?
РЕДАКТИРОВАТЬ: мне приходит в голову, что оскорбительное распределение делается не на родном Python, а в NumPy или Scikit-Learn. Ссылка на источник cpython:Modules/resource.c Если это так, то это будет определенный docbug.
import resource
resource.setrlimit(resource.RLIMIT_AS, (1*1048576L, 1.2*1048576L))
resource.setrlimit(resource.RLIMIT_DATA, (1*1048576L, 1.1*1048576L))
resource.setrlimit(resource.RLIMIT_STACK, (100000, 120000))
Версии: python2.7.3 (macports, 64b) на MacOS 10.8.2, py27-numpy.
Машина имеет 4 Гб физической памяти.
2 ответа
Мне приходит в голову, что ошибочное распределение выполняется не в нативном Python, а в numpy или scikit-learn. Мой код выделения может быть утечка памяти временным. Будем расследовать. Возможно, нужно посмотреть на gc.
Если это так, то это звучит как документальный жук на ресурсе.
Ссылка на источник cpython:Modules/resource.c
Согласно выпуску Chromium № 853873 , macOS не соблюдает (по крайней мере, в середине 2018 г.)RLIMIT_DATA
илиRLIMIT_AS
.