2015-11-05 102 views
14

我在我的服務器託管上受到1GB內存的限制。當我想編譯一些像git-annex這樣的大程序時,Cabal吃了很多內存。有沒有辦法限制cabalgcl使用一些選項來限制內存使用?限制cabal安裝使用的內存?

我更新了一些問題的問題:我正在運行cabal(1.22.4.0)和Ghc 7.10.2關於Webfaction託管(CentOS 7 - 64位),可以訪問shell(非root訪問)。 Webfaction管理員/機器人通常會因彙編而容忍一些爆發。但Ghc/Cabal需要太多的內存,並花費太多的時間用於某些軟件包編譯。所以系統會自動殺死所有進程。

我需要重新啓動編譯很多次,最終獲得成功的結果。

我的主要目標是,編譯成功結束,但需要多長時間。

+0

你在使用什麼操作系統?你有沒有啓用交換空間? – ErikR

+3

我認爲大多數人都試圖在自己的機器上編譯並運行二進制代碼 - 也許這是一個選項? – Carsten

+3

如果一切都失敗了,我會在我自己的PC上使用與服務器相同的(-ish)操作系統在本地創建一個虛擬機,在本地編譯所有內容,並將所有內容上傳到服務器。由於GHC靜態鏈接大部分內容,因此上載本地編譯的二進制文件甚至可能無需定製本地虛擬機即可運行。 – chi

回答

2

編輯:文章是不清楚真正的問題,所以忽略,因爲它與其他的心事寫這個答案,但有一些有用的意見。我認爲,如果你將Cabal或GHC的內存消耗限制在1GB以內,由於Linux內存衛士提前終止(或者別人稱之爲 - 有人請嗎?),你會開始得到很多失敗的版本。如果你找到一種方法說服Cabal本身減少記憶力,並說服GHC減肥,情況可能並非如此。

我就遇到了這個剛剛而只交換空間1GB 1GB的虛擬機上建立咖喱KiCS2。 (當然,我的目標不是要限制內存消耗,而是讓該死的東西來完成的建築,所以我所做的就是增加虛擬內存到4GB,並交換至8GB,但是這顯然不是你以後)。

所以我認爲在編譯期間GHC可能沒有消耗大量內存的解決方法。只要確保並行編譯已關閉。並且研究意味着通過編譯標誌(可能是GHC本身)來減少GHC的內存消耗,或者關閉可能消耗大量內存的優化階段等。

儘管明亮的頭腦可能證明我錯了。

+0

好吧,事實上,當我說我的託管提供了限制內存時,這是因爲內存衛士會在一定時間內殺死任何進程,而這些進程在一定的時間內吃得更多。虛擬機是不可能的,因爲我不是root。唯一的辦法是ghc的標誌,但我不知道它。關於這一點有什麼想法? – reyman64

+0

不是,它是一個正在吹GHC的特定.hs文件嗎?如果你單獨編譯它? –

+0

噢,你說你可以超過限制,但只有在短時間爆發而不超過n秒?然後,您可以在達到某個閾值時定期暫停和恢復編譯過程。但是這需要一些不平凡的但不是不可能的腳本。如果您可以確定是這種情況,那麼您可以將其作爲另一個問題發佈或修改此問題。 –