Ограничить память, используемую установкой Кабала?

Я ограничен 1 ГБ памяти на моем сервере. Когда я хочу скомпилировать какую-нибудь большую программу, такую ​​как git-annex, Cabal съедает много памяти. Есть ли способ ограничить cabal или gcl с помощью какой-либо опции для ограничения использования памяти?

Я обновил вопрос с некоторыми подробностями: я использую cabal (1.22.4.0) и Ghc 7.10.2 на хостинге Webfaction (CentOS 7 - 64-битная версия) с доступом к оболочке (без root-доступа). Администратор/робот веб-фракции обычно допускают некоторые всплески из-за компиляции. Но Ghc/Cabal требуют слишком много памяти и тратят слишком много времени на компиляцию определенного пакета. Таким образом, система автоматически убивает все процессы.

Мне нужно перезапустить компиляцию много раз, чтобы наконец получить успешный результат.

Моя основная цель состоит в том, чтобы компиляция завершилась успешно, сколько бы времени это ни заняло.


person reyman64    schedule 05.11.2015    source источник
comment
Какую ОС вы используете? Вы включили пространство подкачки?   -  person ErikR    schedule 05.11.2015
comment
Я думаю, что большинство пытаются скомпилировать на своей машине и отправить бинарники - может быть, это вариант?   -  person Random Dev    schedule 05.11.2015
comment
Если ничего не помогает, я бы создал виртуальную машину локально на своем ПК с той же ОС, что и на сервере, скомпилировал бы все локально и загрузил бы все на сервер. Поскольку GHC статически связывает большинство вещей, загрузка локально скомпилированных двоичных файлов может работать даже без необходимости использования специальной локальной виртуальной машины.   -  person chi    schedule 05.11.2015
comment
unix. Однако stackexchange.com/questions/44985/ содержит множество предложений о том, как ограничить использование памяти одним процессом. Возможно, вы можете взглянуть на это, чтобы увидеть, поможет ли это.   -  person Akaberto    schedule 17.11.2015


Ответы (2)


Подтверждено, что предложение @reyman64 работает на Xubuntu 18.04 с 2 ГБ оперативной памяти. Спасибо! Итак, cabal install -v cabal-install вешает систему. Следующее работает нормально:

cabal install -v --ghc-options='+RTS -M1G -RTS' cabal-install
person HadoopMarc    schedule 05.02.2020

РЕДАКТИРОВАТЬ: в сообщении не было ясности об истинной проблеме, поэтому игнорируйте этот ответ, поскольку он был написан с чем-то другим, но содержит несколько полезных комментариев.

Я думаю, что если вы внешне ограничите потребление памяти Cabal или GHC до 1 ГБ, вы начнете получать много неудачных сборок из-за преждевременного прекращения работы охраной памяти Linux (или как там она называется — кто-нибудь, пожалуйста?). Это может быть не так, если вы найдете способ убедить саму Cabal использовать меньше памяти, а также убедить GHC сесть на диету.

Я столкнулся с этим совсем недавно, когда собирал Curry KiCS2 на виртуальной машине с 1 ГБ памяти и всего 1 ГБ пространства подкачки. (Конечно, моей целью было не ограничить потребление памяти, а вместо этого заставить эту чертову штуку закончить сборку, поэтому все, что я сделал, это увеличил память виртуальной машины до 4 ГБ и переключил ее на 8 ГБ, но это явно не то, что вам нужно.)

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

Хотя более светлый ум мог бы доказать, что я ошибаюсь.

person Erik Kaplun    schedule 05.11.2015
comment
Хорошо, на самом деле, когда я говорю, что мой хостинг ограничивает память, это потому, что защита памяти убивает любой процесс, который потребляет больше в течение определенного периода времени. Виртуальная машина невозможна, потому что я не root. Единственным способом является флаг для ghc, но я этого не знаю. Есть идеи по этому поводу? - person reyman64; 05.11.2015
comment
Нет, это какой-то конкретный файл .hs, который взрывает GHC? Если собрать отдельно? - person Erik Kaplun; 05.11.2015
comment
О, вы говорите, что можете превысить лимит, но только короткими очередями и не дольше n секунд? Затем вы можете просто периодически приостанавливать и возобновлять процесс компиляции, когда он достигает определенного порога. Но для этого требуется нетривиальный, но не невозможный сценарий. Если вы можете определить, что это так, вы можете опубликовать это как другой вопрос или изменить этот. - person Erik Kaplun; 05.11.2015
comment
Да, это именно то, что происходит :-/ Я вижу вариант в сети, но я не понимаю, могу ли я использовать его в моем случае, что вы думаете об этом: cabal install ... --ghc-options='+RTS -M400m' ? Здесь я нашел другую информацию, но ее действительно сложно понять: downloads.haskell.org/~ghc/7.4.1/docs/html/users_guide/ - person reyman64; 06.11.2015
comment
RTS, я думаю, относится к среде выполнения. - person Erik Kaplun; 06.11.2015
comment
@reyman64 reyman64 Если вы пытаетесь использовать +RTS, обязательно включите -RTS, чтобы его можно было чередовать с другими вариантами, например --ghc-options='+RTS -M400m -RTS'. Я не знаю навскидку, действительно ли это будет делать то, что вы хотите, например. это зависит от сборки GHC с включенной RTS, но звучит многообещающе. - person Daniel Wagner; 17.11.2015