Подтвердить что ты не робот

Как ограничить память программ OS X? ulimit -v ни -m работают

У моих программ заканчивается память наполовину, когда я их запускаю. В Linux я могу установить жесткий предел доступной памяти с помощью ulimit -v mem-in-kbytes. Фактически, я использую ulimit -S -v mem-in-kbytes, поэтому я получаю правильную проблему с распределением памяти в программе, и я могу прервать.

Но... ulimit не работает в OSX 10.6. Я пробовал с параметрами -s и -m, и они не работают.

В 2008 году была обсуждена одна и та же проблема в MacRumors, но никто не предложил хорошую альтернативу. Это должно быть способом, которым программа может научиться тратить слишком много памяти или устанавливать ограничение через ОС.

4b9b3361

Ответ 1

После того, как я боролся с этим сам (с ограниченным успехом), я решил, что есть два способа сделать это...

Вы можете настроить элемент запуска для своего исполняемого файла. Важной частью plist является раздел, например..

<key>SoftResourceLimits</key>
<dict>
    <key>Stack</key>
    <integer>10000000000</integer>
</dict>

Существуют различные доступные ключи... которые можно найти на странице Apple MAN.

Другим способом сделать это, я думаю, является установление значения в /etc/launchd.conf (система) или /etc/launchd-usr.conf (peruser). Например, ваш файл launchd.conf может содержать...

umask 002
limit stack 67104768 67104768
limit maxproc 3400 4500
limit maxfiles 256 unlimited
setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

Документация по всем функциям launchd, если вы спросите меня. Как будто Apple может не заботиться о том, чтобы люди за пределами своих стен действительно понимали, как все это работает. Существует так много возможностей, которые могут быть достигнуты путем освоения launchd и его тонкостей... но есть немного конкретных/официальных ресурсов для того, как правильно их реализовать.

Ответ 2

setrlimit должен выполнить эту работу. Я считаю, что эквивалент BSD ulimit...