Ограничить память, используемую при установке cabal?
Я ограничен 1 ГБ памяти на моем сервере. Когда я хочу скомпилировать какую-нибудь большую программу вроде git-annex
Кабала ест много памяти. Есть ли способ ограничить cabal
или же gcl
использовать какую-либо опцию, чтобы ограничить использование памяти?
Я обновил вопрос с некоторыми деталями: я бегу cabal
(1.22.4.0) и Ghc
7.10.2 на хостинге Webfaction (CentOS 7 - 64bit), с доступом к оболочке (без доступа root). Администратор / робот Webfaction, как правило, допускает некоторые всплески из-за компиляции. Но Ghc
/ Cabal
нужно слишком много памяти и тратить слишком много минут на компиляцию определенного пакета. Таким образом, система автоматически убивает все процессы.
Мне нужно многократно перезапускать компиляцию, чтобы наконец получить успешный результат.
Моя главная цель - чтобы компиляция заканчивалась успехом, как бы долго это ни занимало.
1 ответ
Предложение @reyman64 подтверждено для работы на Xubuntu 18.04 с оперативной памятью 2 ГБ. Благодарность! Так,cabal install -v cabal-install
зависает система. Следующее работает нормально:
cabal install -v --ghc-options='+RTS -M1G -RTS' cabal-install
РЕДАКТИРОВАТЬ: сообщение было неясно об истинной проблеме, поэтому игнорируйте этот ответ, так как он был написан с чем-то другим, но содержит некоторые полезные комментарии.
Я думаю, что если вы внешне ограничите потребление памяти Cabal или GHC до 1 ГБ, вы начнете получать множество неудачных сборок из-за досрочного прекращения защиты памяти Linux (или как там это называется - кто-то, пожалуйста?). Это может быть не так, если вы найдете способ убедить Кабалу самому использовать меньше памяти и убедить GHC тоже сесть на диету.
Я столкнулся с этим совсем недавно, когда собирал Curry KiCS2 на виртуальной машине емкостью 1 ГБ с объемом подкачки всего 1 ГБ. (Конечно, моя цель состояла не в том, чтобы ограничить потребление памяти, а в том, чтобы получить чертову вещь для завершения сборки, поэтому все, что я сделал, это увеличил объем памяти ВМ до 4 ГБ и подкачал до 8 ГБ, но это явно не то, что вам нужно.)
Так что я думаю, что, возможно, нет обходного пути для GHC, потребляющего много памяти во время компиляции. Просто убедитесь, что параллельная компиляция отключена. И исследование означает сокращение потребления памяти GHC с помощью флагов компиляции (возможно, самого GHC) или отключения фаз оптимизации, которые могут потреблять много памяти, и т. Д.
Более яркий ум может доказать, что я не прав.