2015-11-05 2 views
14

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

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

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

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

+0

Какая ОС вы используете? Включили ли вы какое-либо пространство подкачки? – ErikR

+3

Я думаю, что большинство пытаются скомпилировать на своей машине и отправлять двоичные файлы - может быть, это вариант? – Carsten

+3

Если все остальное не удается, я бы создал виртуальную локальную локацию на своем ПК с той же (-ish) ОС, что и на сервере, скомпилировал все локально и загрузил все на сервер. Поскольку GHC статически связывает большинство вещей, загрузка локально скомпилированных двоичных файлов может даже работать без необходимости использования локальной локальной виртуальной машины. – chi

ответ

2

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

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

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

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

Более яркий ум может доказать, что я ошибаюсь.

+0

Хорошо, на самом деле, когда я говорю, что мой хостинг предоставляет ограниченную память, это потому, что защита памяти убивает любой процесс, который потребляет больше времени в течение определенного времени .. VM невозможно, потому что я не root. Только пути - это флаг для ghc, но я этого не знаю. Любая идея по этому вопросу? – reyman64

+0

Нет, это особый файл .hs, который продувает GHC? Если вы скомпилируете его отдельно? –

+0

О, вы говорите, что можете превысить предел, но только во время коротких всплесков и не более чем на n секунд? Затем вы можете просто приостановить и возобновить процесс компиляции периодически, когда он достигнет определенного порога. Но для этого требуются некоторые нетривиальные, но не невозможные сценарии. Если вы можете определить, что это так, вы можете опубликовать это как другой вопрос или изменить его. –

Смежные вопросы