2015-12-18 36 views
20

Apache Spark 1.6.0 RC3にアップグレードしようとしました。私のアプリケーションは現在、ほぼすべてのタスクのために、これらのエラーをスパム:デバッグ「スパーク1.6.0の「管理されたメモリリークが検出されました」

Managed memory leak detected; size = 15735058 bytes, TID = 830 

私はDEBUGorg.apache.spark.memory.TaskMemoryManagerのためのログレベルを設定し、ログに表示しました:

I2015-12-18 16:54:41,125 TaskSetManager: Starting task 0.0 in stage 7.0 (TID 6, localhost, partition 0,NODE_LOCAL, 3026 bytes) 
I2015-12-18 16:54:41,125 Executor: Running task 0.0 in stage 7.0 (TID 6) 
I2015-12-18 16:54:41,130 ShuffleBlockFetcherIterator: Getting 1 non-empty blocks out of 1 blocks 
I2015-12-18 16:54:41,130 ShuffleBlockFetcherIterator: Started 0 remote fetches in 0 ms 
D2015-12-18 16:54:41,188 TaskMemoryManager: Task 6 acquire 5.0 MB for null 
I2015-12-18 16:54:41,199 ShuffleBlockFetcherIterator: Getting 1 non-empty blocks out of 1 blocks 
I2015-12-18 16:54:41,199 ShuffleBlockFetcherIterator: Started 0 remote fetches in 0 ms 
D2015-12-18 16:54:41,262 TaskMemoryManager: Task 6 acquire 5.0 MB for null 
D2015-12-18 16:54:41,397 TaskMemoryManager: Task 6 release 5.0 MB from null 
E2015-12-18 16:54:41,398 Executor: Managed memory leak detected; size = 5245464 bytes, TID = 6 

はどのようにこれらのエラーをデバッグするのですか?割り振りと割り当て解除のためにスタックトレースを記録する方法があるので、どのようなリークを見つけることができますか?

新しい統合メモリマネージャー(SPARK-10000)についてよくわかりません。漏れが私のせいかもしれないのでしょうか、それともスパークバグでしょうか?

+0

DEBUG Levelでロガーを設定して実行しようとしましたか? – eliasah

+0

ありがとう!私は '' 'で実行し、割り当てと割り当て解除を記録します。まだ何が起こっているのか分かりません:)。私は少し詳細を追加します。 –

+0

私はログを追加しました。 5MBの 'acquire'呼び出しと、5MBの' release'呼び出しという2つの呼び出しがあります。しかし、なぜ? –

答えて

22

短い答えは、ユーザーがこのメッセージを見るはずではないということです。ユーザーは、統合メモリマネージャでメモリリークを作成することはできません。そのような漏れが起こること

は、Sparkのバグです:SPARK-11293


しかし、あなたはメモリリークの原因を理解したい場合は、これは私がそれをやった方法です。

  1. Sparkのソースコードをダウンロードし、ビルドが可能であることを確認してください。 TaskMemoryManager.java
  2. acquireExecutionMemoryreleaseExecutionMemoryに余分なロギングを追加します。logger.error("stack trace:", new Exception());
  3. 変更他のすべてのデバッグログをTaskMemoryManager.javaでエラーに。 (ロギング構成を把握するよりも簡単です...)

すべての割り当てと割り当て解除の完全なスタックトレースが表示されます。それらをマッチさせて割り当てを解除することなく割り当てを見つけようとする。これで、リークの原因のスタックトレースが作成されました。

+0

EMRでスパークストリーミングを実行しているときにこの例外が発生しました 16/04/14 13:49:10 WARN memory.TaskMemoryManager:リーク32.3 MB memory from [email protected] 16/04/14 13:49:10エラーexecutor.Executor:管理されたメモリリークが検出されました。サイズ= 33816576バイト、TID = 2942915 16/04/14 13時49分10秒エラーexecutor.Executor:ステージ35684.0(TID 2942915) java.lang.OutOfMemoryErrorをタスク22.0の例外:メモリの262144のバイトを取得することができません、得た220032 – Nipun

+0

あなたはそれを解決できましたか?私は火花1.6のメモリリークの同様の問題に直面している。2 –

+0

私の場合、それは[SPARK-14560](https://issues.apache.org/jira/browse/SPARK-14560)だったと思います。これはSpark 2.0.0で修正され、2.1.0を使用しています。 –

関連する問題