2017-02-26 13 views
3

重複のお詫びですが、この問題は他の投稿を読むことで解決できませんでした。私は、計算集約的な反復アルゴリズムを実行しようとしています。次の反復処理を関数で「更新」を与えられたと私は初期状態は、私はアルゴリズムを初期化していたとゼロ番目の反復処理である繰り返し使用時のClojure GCのオーバーヘッド制限を超えました

(def iterates (doall (take 1000 (iterate update initial-state)))) 

を経由して、すべての繰り返し処理を収集しています。残念ながら、私は最小限の例を提供することはできません。更新は、地図データ構造を入力として取り込んで、更新された地図データ構造を出力するかなり複雑な関数です。コードは最大800回の反復で正常に実行されますが、以下のエラーが発生します。一般的な意見は、ガーベジコレクタが利用できるサイズを増やすだけでは不十分であるということです。これは深刻な問題(おそらく)の症状であるためです。他の投稿では、問題は非常に具体的ですが、私の更新機能は非常に複雑です。どのように私はここで提供された一般性でこれを解決するために行くことができますか?私が使用できる特定の工具ユーティリティはありますか?

java.lang.OutOfMemoryErrorを GCオーバーヘッドの制限に起因する
  1. は@ StefanKamphausenさんのコメントと一緒に行くために

     Double.java: 519 java.lang.Double/valueOf 
         Numbers.java: 611 clojure.lang.Numbers$DoubleOps/multiply 
         Numbers.java: 148 clojure.lang.Numbers/multiply 
          core.clj: 21 ssm4clj.core/corr 
          core.clj: 6 ssm4clj.core/corr 
          core.clj: 42 ssm4clj.core/innovation 
          core.clj: 40 ssm4clj.core/innovation 
          core.clj: 2522 clojure.core/partial/fn 
          core.clj: 2646 clojure.core/map/fn 
         LazySeq.java: 40 clojure.lang.LazySeq/sval 
         LazySeq.java: 49 clojure.lang.LazySeq/seq 
          RT.java: 521 clojure.lang.RT/seq 
          core.clj: 137 clojure.core/seq 
          core.clj: 2654 clojure.core/map/fn 
         LazySeq.java: 40 clojure.lang.LazySeq/sval 
         LazySeq.java: 49 clojure.lang.LazySeq/seq 
         Cons.java: 39 clojure.lang.Cons/next 
          RT.java: 688 clojure.lang.RT/next 
          core.clj: 64 clojure.core/next 
        protocols.clj: 168 clojure.core.protocols/fn 
        protocols.clj: 124 clojure.core.protocols/fn 
        protocols.clj: 19 clojure.core.protocols/fn/G 
        protocols.clj: 31 clojure.core.protocols/seq-reduce 
        protocols.clj: 75 clojure.core.protocols/fn 
        protocols.clj: 75 clojure.core.protocols/fn 
        protocols.clj: 13 clojure.core.protocols/fn/G 
          core.clj: 6545 clojure.core/reduce 
          core.clj: 6527 clojure.core/reduce 
          core.clj: 347 ssm4clj.core/mean-conditional 
          core.clj: 319 ssm4clj.core/mean-conditional 
           REPL: 332 ipp4clj.multiplexing/update-single-gp-mean 
           REPL: 329 ipp4clj.multiplexing/update-single-gp-mean 
    
+1

1000個の状態がどれくらいのメモリを占有しますか?この大量のデータを保持するのに十分なRAMと、実行している計算によって作成された追加のゴミが足りない可能性はありますか? –

+0

あなたはすべての州を必要としているのでしょうか、あるいは目標に達する州だけが必要でしょうか?あなたが行くときにあなたが州を捨てるために '落ちる 'と'取る 'を使うことができるのだろうか?あるいは '落ち込み 'と'最初のもの'を組み合わせたものでしょうか? –

+0

@SamEstep、プロセスを「トップ」にすると、%MEM列のパーセンテージは問題のプロセスに対して約30です。 top、%MEMのドキュメントをチェックすると、利用可能な物理メモリの現在使用されているタスクの占有率が表示されます。このプロセスは私のRAMの30%しか使用していないと私は理解しています。 – Lindon

答えて

1

を超えました。私はjvisualvmもあなたをかなり助けてくれると思います。 Hereは使い方を説明しています。

関連する問題