Способ ограничить, сколько оперативной памяти может занять произвольный процесс?

12

Допустим, у нас есть машина OS X с 4 ГБ оперативной памяти. Можно ли настроить его так, чтобы ни один процесс не занимал больше, чем, скажем, 3 ГБ, поэтому, независимо от того, какова нагрузка на процесс, всегда остается некоторая память, чтобы система реагировала?

фомиты
источник
6
Нет. И это было бы контрпродуктивно. Микроуправление распределением ОЗУ - это не то, для чего предназначены ОС. Свободное ОЗУ тратится впустую ОЗУ. Слишком много сделано из предполагаемого плохого управления ОЗУ в OS X. Закрытие Activity Monitor и продолжение жизни - лучшее средство.
8
@cksum В вашем комментарии есть масса предположений, большинство из которых неверны. Я не пытаюсь отодвинуть назад управление памятью на диске OS X. Что я на самом деле делаю, так это пытаюсь выяснить, есть ли способ сохранить достаточную функциональность системы при тестировании некоторого кода, который довольно легко превращается в безудержный процесс. Потому что свободная RAM не тратится впустую RAM, если это то, что позволяет вам исправлять ошибки.
Fomite
3
Извините, но если ваш вопрос касается программирования, (разработки и тестирования) приложений, то это не по теме для этого форума. Пожалуйста, ознакомьтесь с FAQ для получения дополнительной информации о том, какие вопросы относятся здесь: apple.stackexchange.com/faq
10
FFS, это не вопрос программирования. Это вопрос ОС. Ограничение памяти, которое может использовать произвольный процесс - Safari, Matlab, Call of Duty и т. Д. - на уровне ОС - это однозначно вопрос ОС.
Fomite
7
Будучи сайтом для «энтузиастов Apple и продвинутых пользователей», вопросы, которые по сути касаются виртуальной памяти, явно в рамках и по теме. Даже если разработка связана с этим, это будет справедливо для проблем с настройкой или производительностью.
bmike

Ответы:

9

Подобный вопрос отмечен здесь. Как я могу ограничить объем оперативной памяти, которую может использовать приложение Mac OS?

Они рекомендуют использовать команду ulimit , но им не удалось успешно ограничить сумму до желаемого. Я думаю, что проблема, с которой они столкнулись, заключалась в том, что заданная опция -u или -v не учитывала систему подкачки памяти, например, вы можете выделить только X объем пространства для вашего процесса в реальном ОЗУ, но мы можем Вы в виртуальной памяти весь день.

Обратите внимание, что это может быть опасным отключением виртуальной памяти, это может привести к тому, что ваш Mac просто заблокируется и т. Д. При запуске ОЗУ.

Попробуйте запустить ulimit с аргументами -l, -m или -v, как указано в справочной странице ulimit, до ОС, если он обратит внимание на эти настройки или нет, как указано.

ulimit: ulimit [-SHacdefilmnpqrstuvx] [лимит]

Изменить ограничения ресурсов оболочки.

Предоставляет контроль над ресурсами, доступными оболочке, и процессами, которые она создает, в системах, которые позволяют такой контроль.

На самом деле не могу найти какой-либо определенный источник, который подтверждает, если OS X игнорирует ulimit или нет, но после сбоя ссылочной ulimit

Если вы можете заставить ulimit работать для ваших нужд, попробуйте, если не комбинация ulimit и / или отключение виртуальной памяти, возможно, вы сможете установить ограничение в 3 ГБ для отдельных процессов. К вашему сведению, это хорошая ссылка для получения дополнительной информации о полном отключении виртуальной памяти в системе Snow Leopard 10.6.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
MrDaniel
источник
Это похоже на вероятный правильный ответ - я попробую его, когда в следующий раз запусту это. На данный момент, принимая ответ.
Fomite
5

Если вы используете Lion (или более новый OSX) сервер на вашем Mac, вы можете запустить OSX внутри виртуальной машины (VirtualBox, Parallels или VMWare и др.) На этом Mac. Ограничьте ВМ до 3 ГБ физической ОЗУ, и любое приложение или процесс внутри ВМ также будет ограничен. Система, в которой размещена виртуальная машина, должна отвечать на запросы, даже если операционная система в виртуальной машине имеет ограничения на резервное копирование-своп-диск или происходит сбой.

Если вы отлаживаете потенциально сбежавший процесс, вы можете войти в виртуальную машину ssh, чтобы запустить отладчик или отладочный кусочек из командной строки, и записывать данные до тех пор, пока все не заблокируется.

hotpaw2
источник