Как ограничить память программы OS X? ulimit -v ни -m не работают - PullRequest
32 голосов
/ 18 июля 2010

Моим программам не хватает памяти, как половину времени, когда я их запускаю. Под Linux я могу установить жесткое ограничение на доступную память, используя ulimit -v mem-in-kbytes. На самом деле я использую ulimit -S -v mem-in-kbytes, поэтому у меня возникает проблема с правильным выделением памяти в программе, и я могу прервать ее.

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

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

Ответы [ 2 ]

6 голосов
/ 29 мая 2011

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

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

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

Доступны различные ключи ... их можно найти на странице MAN Apple .

Еще один способ сделать это, Я думаю , - установить значение в / 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 голосов
/ 18 июля 2010

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

...