2017-06-06 8 views
1

私たちは、Spring Integrationコンテキストを持つSpring BootアプリケーションをActiveMQキューから使います。春のインテグレーションはいつもより多くのメモリを消費しています

キューにメッセージがないと、メモリが多用され、数時間後には常にメモリ不足になります。

何もしていないようですが、消費されるメモリ(ヒープ)は常に小さなペースで増加しています。

これを回避する方法と、少なくともこれをプロファイルする方法はありますか?

私はおそらく、彼らは自分の状況をお手伝いしますJDK 8に移動するので、これらのJVMオプションを使用してきた
+0

Visual VMまたはdynaTraceを使用するプロファイル。 GCの設定を確認してください。 JDK 8を使用していますか?それは重要です。 – duffymo

+0

はい、私たちはJava 8を使用していますが、VisualVM、JConsole、YourKitでプロファイリングしましたが、助けになるものは何も見つかりません – JonathanVila

+0

JVMのGC設定を確認してください。誰のJVMですか? Oracle、IBM、OpenJDK? – duffymo

答えて

0

-Xms1024m -Xmx1024m -XX:MaxMetaspaceExpansion=0 -XX:+UseConcMarkSweepGC -server -XX:+CMSParallelRemarkEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:MaxDirectMemorySize=256M -XX:+ScavengeBeforeFullGC -XX:+CMSScavengeBeforeRemark 

this blog postを見てください。私はJDK 8のGCをチューニングするのに非常に便利だとわかりました。

+0

私は、GCの引数が役に立ちますガベージコレクションの高速化、CPUの影響の軽減など.....しかし、Springがオブジェクトを作成して常に苦しんでいると、メモリはいつでも使い果たされます。 – JonathanVila

+0

誰が春のすべての記憶を食べているのか分かりますか? (Btw、あなたが送ったそれらの引数を試しています、ありがとう) – JonathanVila

+0

参照がクリーンアップされていない理由はわかりません。コード内の静的マップが検索対象となります。 – duffymo

1

あなたのコードがメモリリークを引き起こしていませんか? は、Java VisualVMのを経由してあなたのアプリに接続し、このような絵表示された場合:

example of memory leak

それはあなたが正確にメモリリークを持って100%だと、これは問題が春やJavaれていませんが)。

は、私はあなたがどのような問題をデバッグするには、この便利な記事を読んで助言し、その後にアプリを調べることができます。

  1. https://www.toptal.com/java/hunting-memory-leaks-in-java
  2. https://www.dynatrace.com/resources/ebooks/javabook/memory-leaks/
  3. https://dzone.com/articles/memory-leak-andjava-code
  4. https://blogs.sourceallies.com/2011/07/debugging-memory-leaks-with-visualvm/
  5. http://blog.rejeev.com/2009/04/analyzing-memory-leak-in-java.html
関連する問題