2016-09-12 2 views
2

私のアプリケーションはドッカーコンテナで実行されており、scalaを使用し、 "OpenJDK 64ビットサーバVM(ビルド25.102-b14、混合モード)"を使用し、そのXmxは16ギガバイトとコンテナメモリ制限は、コンテナが殺されているいくつかの時間のために実行した後、24GBです:Javaの内部メモリがネイティブメモリトラッキングを増やす理由

Last State:   Terminated 
    Reason:   OOMKilled 
    Exit Code:  137 

私は「java.lang.OutOfMemoryErrorを:Javaのヒープ領域」を見つけることができませんが、ログにエラーがなく、すべての48のノードで最後の2週間に1回も。だから、通常のヒープOOMではないでしょう。

dmesgの出力:

$ dmesg -l err,crit,alert,emerg 
STDIN is not a terminal 
[1647254.978515] Memory cgroup out of memory: Kill process 10924 (java) score 1652 or sacrifice child 
[1647254.989138] Killed process 10924 (java) total-vm:34187148kB, anon-rss:24853120kB, file-rss:23904kB 
[1655749.664871] Memory cgroup out of memory: Kill process 1969 (java) score 1652 or sacrifice child 
[1655749.675513] Killed process 1969 (java) total-vm:35201940kB, anon-rss:24856624kB, file-rss:24120kB 
[1655749.987605] Memory cgroup out of memory: Kill process 2799 (java) score 1656 or sacrifice child 

それが再び殺され、データは次のようになりますされる前に、私はその後、JCMDを複数回実行します。 ネイティブメモリトラッキング:

合計:予約= 25505339キロバイト、コミット= (:予約済み= 16777216キロバイト、コミット= 16777216キロバイトのmmap)

    〜25140947キロバイト Javaヒープ (= 16777216キロバイト、コミット= 16777216キロバイト予約) 、

  • スレッド(=予約済み1013160キロバイト:(= 91264キロバイト犯し、245760キロバイト=予約済みのmmap)の

  • クラス (malloc関数= 2236キロバイトの#29794) (クラス#14539)(= 247996キロバイト、コミット= 93500キロバイト予約) = 1013160キロバイト) コミット(スレッド#1902) (スタック:予約= 1003956キロバイトを、= 1003956キロバイトコミット) (malloc関数= 6240キロバイトの#9523) (アリーナ= 2964キロバイトの#3803)

  • コード(予約= 263255キロバイト、コミット= 86131KB) (malloc = 13655 KB番号20964) (MMAP:予約済み= 249600キロバイト、コミット= 72476キロバイト)

  • GC(予約= 776174キロバイト、コミット= 776174キロバイト) (malloc関数= 120814キロバイトの#164310) (MMAP:予約済み= 655360キロバイト、コミット= 655360キロバイト)

  • コンパイラ(予約= 812キロバイト、コミット= 812キロバイト)3 (malloc関数= 681キロバイトの#1823) (アリーナ= 131キロバイト位)

  • 内部(予約= 6366260キロバイト、コミット= 6366256キロバイト) (malloc関数= 6366256KB#178778) (MMAP:予約済み= 4キロバイト、コミット= 0キロバイト)

  • 記号(予約= 18391キロバイト、コミット= 18391キロバイト) (malloc関数= 16242キロバイトの#153138) (アリーナ= 2150キロバイト#1)

  • ネイティブメモリ(= 9002キロバイト約束、9002キロバイト=予約済み)追跡 (malloc関数= 186キロバイト#2000)

  • アリーナのチャンク(= 273キロバイトコミット予約= 273キロバイト)(オーバーヘッド= 8816キロバイトの追跡) (malloc関数= 273キロバイト)

  • 不明(予約= 32800キロバイト、コミット= 32キロバイト) (MMAP:予約= 32800キロバイト、コミット= 32キロバイト)私が気づい

ことの一つは、このセクションです: 内部(予約= 6366260キロバイト、コミット= 6366256キロバイト)

これは成長を続け、合計メモリ使用量が24GBを超えてしまいます。

誰も以前に同様の問題が発生していますか?誰もが内部のメモリが何であるかを知っています。メモリを解放せずに成長し続ける理由は何でしょうか?

+0

私たちのアプリケーションはkubernates 1.4にアップグレードされた後、管理されたコンテナで実行されています。この問題は修正されているようですが、100個以上の48個のポッドすべてでOOMが修正されているようです。まだそれが原因で何が起こっているのかまだ分かりません。 –

+0

更新:これは改善されただけですが、アップグレード後も解決されません.8日後に同じ問題が発生するポッドがいくつかあります。ネイティブメモリはまだ増加していますが、はるかに遅いペースです。 –

答えて

1

これはあなたの質問に対する答えではなく、単なる回避策です。

javaバージョン "1.8.0_45"でJRubyを実行しているドッカーコンテナで同じ問題が発生しています。解決策は、明示的にガベージコレクションを呼び出すことでした。私はまったく考えていない、なぜこれが動作しますが、GC内部Javaメモリの後に戻って8MBに戻った。

関連する問題