2015-11-05 16 views
14

私はサーバーのホストで1GBのメモリに制限されています。 git-annexのような大きなプログラムをコンパイルしたいとき、Cabalはたくさんのメモリを食べます。 cabalまたはgclにいくつかのオプションを使用してメモリ使用を制限する方法がありますか?カバルインストールで使用するメモリの上限はありますか?

私はcabal(1.22.4.0)とGhc 7.10.2をWebfactionホスティング(CentOS 7 - 64bit)上でシェル(非ルートアクセス)にアクセスして実行しています。 Webfaction admin/robotは、一般的に、コンパイルによっていくつかのバーストを許容します。しかし、Ghc/Cabalは、あまりにも多くのメモリを必要とし、特定のパッケージのコンパイルに多くの時間を費やします。システムは自動的にすべてのプロセスを終了させます。

私は最終的に成功した結果を得るためにコンパイルを何度も再起動する必要があります。

私の主な目的は、コンパイルが成功することですが、時間がかかります。

+0

使用しているOSは何ですか?スワップスペースを有効にしましたか? – ErikR

+3

私は自分のマシンでコンパイルしてバイナリを出荷しようとしていると思います。おそらくこれはオプションですか? – Carsten

+3

他のすべてが失敗した場合は、サーバと同じ(-ish)OSを使用して自分のPCにローカルにVMを作成し、すべてをローカルでコンパイルし、すべてをサーバにアップロードします。 GHCはほとんどのものを静的にリンクするので、ローカルでコンパイルされたバイナリをアップロードすることは、カスタムローカルVMを必要とせずに動作するかもしれません。 – chi

答えて

2

編集:この投稿は実際の問題については不明であったため、この回答は無視してください。

CabalやGHCのメモリ消費量を外部から1GBに制限すると、Linuxメモリガード(または何か呼ばれているもの)の早期終了により、多くの失敗したビルドが始まるでしょう。これは、カバル自身がより少ない記憶を使用するように説得し、GHCに食事療法を依頼する方法を見つけた場合には当てはまりません。

ちょうど1GBのスワップスペースを備えた1GBの仮想マシンにCurry KiCS2を構築していたのですが、最近これに遭遇しました。 (もちろん、私の目標はメモリ消費量を制限するのではなく、建物を完成させるのが大変なので、VMメモリを4GBに増やして8GBにスワップするだけでしたが、それはあなたが何をしているのかは分かりません)

だから、おそらくGHCがコンパイル時に大量のメモリを消費するという回避策はないと思います。並列コンパイルがオフになっていることを確認してください。研究は、コンパイルフラグ(GHC自体の可能性もある)によってGHCのメモリ消費量を減らすこと、または大量のメモリを消費する可能性のある最適化フェーズをオフにすることを意味します。

もっと明るい気がしても間違っています。

+0

実際、私のホストは制限メモリを提供していると言いますが、これはメモリガードが特定の時間内に多くを食べるプロセスをkillするためです。私はrootではないのでVMは使用できません。唯一の方法はghcのフラグですが、私はそれを知っていません。この点に関する考えは? – reyman64

+0

いいえ、それはGHCを吹き飛ばしている特定の.hsファイルですか?それを別にコンパイルすれば? –

+0

ああ、あなたは限界を超えることができると言っているが、短いバーストの間だけで、n秒より長くはない。その後、一定のしきい値に達すると、定期的にコンパイルプロセスを中断して再開することができます。しかし、これには簡単ではないが不可能なスクリプティングが必要です。そのように判断できる場合は、これを別の質問として投稿するか、この質問を修正することができます。 –

関連する問題