2010-07-18 5 views
31

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

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

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

+2

Чтобы добавить к этому, я, похоже, не могу заставить его работать с 'setrlimit' либо с любыми RLIMIT_RSS, RLIMIT_DATA, RLIMIT_AS или (достигнутыми здесь) RLIMIT_STACK. –

+0

Как бы то ни было, щедрость будет неосведомленной. –

ответ

2

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

+0

Я посмотрел на страницу man для 'setrlimit' и не видел, как установить ограничение на виртуальную память, хотя вы можете установить ограничение на физическую память. – JWWalker

+0

Ух, ты прав ... – Yuji

+0

Я знаю, что bash ulimit реализован напрямую, вызывая setrlimit. На странице руководства Linux есть опция RLIMIT_AS, которая ограничивает «максимальный размер виртуальной памяти процесса (адресного пространства) в байтах», именно это я хочу контролировать. Я действительно не забочусь о пределе физической памяти. Я хочу знать, когда вся программа превышает 2 ГБ. Ну, на OS X manpage для setrlimit есть RLIMIT_AS. Ближайшим является RLIMIT_RSS. Действительно, IMHO OS X, похоже, выделяет много виртуальной памяти, учитывая то, что я вижу в Activity Monitor. – hectorpal

6

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

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

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

есть различные ключи, доступные ..., которые могут быть найдены на Apple's MAN page.

Ано ther way to it it, Думаю,, установив значение в /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 

документации для всех функциональных возможностей является запуском программ Дыродела, если вы спросите меня .. Это как если бы Apple, не может заботиться/хотите, чтобы люди за пределами своих стен на самом деле понять, как все это работает. There is so much power, который должен быть освоен при запуске и его тонкостях ... но есть немного конкретных/официальных ресурсов, чтобы как правильно их реализовать.

+0

+1 Я против запуска, и я не могу отпустить его. Если бы он просто работал последовательно, я бы использовал его все время. – chiggsy

+0

Обе ссылки сломаны. Я нашел http://launchd.info полезным. – BB9z