web-dev-qa-db-ja.com

Java「オブジェクトヒープ用に十分なスペースを予約できませんでした」RAM

現在、Javaの実行に問題があります。ヒープの問題が原因で開始されません。しかし、私は9 GBを超えるRAMを解放しています(キャッシュが空であると想定している場合は16 GBです)。これは私が受け取るエラーです(そしてfreeコマンド)

root@server: ~ # Java
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

root@server: ~ # free
             total       used       free     shared    buffers     cached
Mem:      25165824   15941148    9224676          0          0    7082176
-/+ buffers/cache:    8858972   16306852
Swap:            0          0          0

仮想サーバーで64ビットDebianを実行しています。仮想化ソフトウェアはOpenVZです。これは私のJavaバージョンです(VMのうち2つ(現在実行中の4つ)を停止した後でこのコマンドを実行できます))

root@server: ~ # Java -version
Java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

私は何ができますか?


要求どおり:

root@server: ~ # cat /proc/meminfo
MemTotal:       25165824 kB
MemFree:        11723412 kB
Cached:          4597552 kB
Active:          9692308 kB
Inactive:        3322544 kB
Active(anon):    7411960 kB
Inactive(anon):  1005340 kB
Active(file):    2280348 kB
Inactive(file):  2317204 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:               960 kB
Writeback:             0 kB
AnonPages:       8417300 kB
Shmem:             21504 kB
Slab:             427452 kB
SReclaimable:     383424 kB
SUnreclaim:        44028 kB

Reguest2:

root@server: ~ # cat /proc/user_beancounters
Version: 2.5
       uid  resource                     held              maxheld              barrier                limit              failcnt
 10023468:  kmemsize                399250512            506245120           5053325720           5558658292                    0
            lockedpages                     0                    8               246744               246744                    0
            privvmpages               6005602              6291447              6291456              6291456                  221
            shmpages                     8576                 8608               579124         579124289562                    0
            dummy                           0                    0  9223372036854775807  9223372036854775807                    0
            numproc                       598                 1236                30000                30000                    0
            physpages                 4634494              6291456              6291456              6291456                    0
            vmguarpages                     0                    0              6291456  9223372036854775807                    0
            oomguarpages              1529371              2144671              6291456  9223372036854775807                    0
            numtcpsock                     62                  164                30000                30000                    0
            numflock                       25                   39                 1000                 1100                    0
            numpty                         13                   24                  512                  512                    0
            numsiginfo                     10                   75                 1024                 1024                    0
            tcpsndbuf                 3330352              4153232           1179110194           1684441906                    0
            tcprcvbuf                 1216896             34410032           1179110194           1684441906                    0
            othersockbuf               270504               537552            589555096           1094886808                    0
            dgramrcvbuf                     0                67048            589555096            589555096                    0
            numothersock                  287                  333                30000                30000                    0
            dcachesize              355559855            446054103           1103879952           1136996352                    0
            numfile                      4766                 7745               250000               250000                    0
            dummy                           0                    0  9223372036854775807  9223372036854775807                    0
            dummy                           0                    0  9223372036854775807  9223372036854775807                    0
            dummy                           0                    0  9223372036854775807  9223372036854775807                    0
            numiptent                      14                   14                 1000                 1000                    0

root@server: ~ # Java
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

root@server: ~ # cat /proc/user_beancounters
Version: 2.5
       uid  resource                     held              maxheld              barrier                limit              failcnt
 10023468:  kmemsize                399246622            506245120           5053325720           5558658292                    0
            lockedpages                     0                    8               246744               246744                    0
            privvmpages               6005601              6291447              6291456              6291456                  233
            shmpages                     8576                 8608               579124         579124289562                    0
            dummy                           0                    0  9223372036854775807  9223372036854775807                    0
            numproc                       598                 1236                30000                30000                    0
            physpages                 4635460              6291456              6291456              6291456                    0
            vmguarpages                     0                    0              6291456  9223372036854775807                    0
            oomguarpages              1529376              2144671              6291456  9223372036854775807                    0
            numtcpsock                     64                  164                30000                30000                    0
            numflock                       25                   39                 1000                 1100                    0
            numpty                         13                   24                  512                  512                    0
            numsiginfo                     10                   75                 1024                 1024                    0
            tcpsndbuf                 3365232              4153232           1179110194           1684441906                    0
            tcprcvbuf                 1249664             34410032           1179110194           1684441906                    0
            othersockbuf               270504               537552            589555096           1094886808                    0
            dgramrcvbuf                     0                67048            589555096            589555096                    0
            numothersock                  287                  333                30000                30000                    0
            dcachesize              355559855            446054103           1103879952           1136996352                    0
            numfile                      4768                 7745               250000               250000                    0
            dummy                           0                    0  9223372036854775807  9223372036854775807                    0
            dummy                           0                    0  9223372036854775807  9223372036854775807                    0
            dummy                           0                    0  9223372036854775807  9223372036854775807                    0
            numiptent                      14                   14                 1000                 1000                    0
8
BrainStone

OpenVZとメモリ

failcntprivvmpagesで起動中のため、コンテナーはホストから仮想メモリ空​​間をこれ以上割り当てることができません。

root@server: ~ # cat /proc/user_beancounters
Version: 2.5
       uid  resource                     held              maxheld              barrier                limit              failcnt
            privvmpages               6005601              6291447              6291456              6291456                 >233<
            physpages                 4635460              6291456              6291456              6291456                    0
            vmguarpages                     0                    0              6291456  9223372036854775807                    0
            oomguarpages              1529376              2144671              6291456  9223372036854775807                    0

仮想メモリ !=物理メモリであることに注意してください。プロセスは、仮想メモリのアドレス可能な量の周りのどこかまで割り当てる(32ビット〜2G-4G、64ビット8)TB -256 TB)は、物理メモリページが使用されていることを意味しません(ページは4KBのメモリチャンクです)。

physpagesは、コンテナーが使用できる物理メモリページの数です。
oomguarpagesは、ホストがメモリに制約がある場合にコンテナが受け取る保証されたメモリページです。
privvmpagesは、コンテナが使用できる仮想メモリページの数です
vmguarpagesは、同様に仮想メモリの保証量です

Java

Oracle Javaは常に仮想メモリの連続した1つのチャンクを割り当てます。ボックスで引数なしでJavaを実行すると、5Mの実メモリが使用されます(RSS)が、VM割り当てられたスペース(VSZ):

  PID COMMAND                        VSZ   RSS
20816 Java                        667496  4912 

Java ファイルのsmapsプロセスのメモリセグメントを見ると、約500MBのチャンクが割り当てられており、残りはメモリマップファイルであり、通常のJavaものです。

しばらく稼働しているシステムでは、利用可能なVMスペースは、プロセスがその一部を使用/解放するにつれて断片化します。Agrep Vmalloc /proc/meminfoは、現在利用可能な最大の空きチャンクであるVmallocChunkを提供します。これが低い場合、システムは、Javaが要求したときに、64ビットボックスで事実上無制限であるため、さらに多くを割り当てようとします。

修正

ホストにprivvmpagesvmguarpagesをはるかに高く設定するように伝えます。それらが物理メモリと同じである必要はありません。それは方法に影響を与えるためです linux memory works

ファイルキャッシュを削除すると、一時的に問題を回避できる可能性がありますecho 1 > /proc/sys/vm/drop_cachesしかし、それは一時的なものです。

メモリのチャンクを制限することができますJavaは、実行時に最小のXmsで、または最大のXmxで実行中に割り当てを試みます。私のマシンでこれらのオプションを使用してJavaを実行します。

Java -Xms10M -Xmx10M

Javaヒープに割り当てられたヒープに10MBの連続したチャンクのみを使用して、合計仮想サイズを140MB程度に減らします。

10
Matt

私たちの場合、VMが起動時に予約しようとするヒープサイズを制限するのに役立ちました。

たとえば、コマンドラインで:

export _Java_OPTIONS = '-Xms64M -Xmx128m'

またはTomcatの場合は[Tomcat_HOME] /bin/setenv.sh

#!/ bin/sh

Java_OPTS = "-Xms64M -Xmx256M"

(コマンドラインの余分な先行アンダースコアに注意してください。)

プロバイダーの説明は次のとおりです。

  • Java VMは起動時に初期ヒープサイズを計算します
  • この計算は、RAM使用可能に基づいています。
  • 一部のJava仮想プライベートサーバー(VPS)へのインストールでは、初期ヒープサイズを計算するときにVPSのメモリ制約を反映できません。代わりに、ホスティングシステムのメモリサイズに基づいて計算を行います。 VPSで利用できない空きメモリ量につながる可能性があります。
  • java_OPTSを介して初期ヒープサイズを提供する場合、VMはこれらの値を使用し、独自に計算を試みません。
7
c_froehlich

おそらく、デフォルトのJavaヒープサイズを変更する必要があります。次の引数を試してください:

-Xms<size>        set initial Java heap size
-Xmx<size>        set maximum Java heap size
-Xss<size>        set Java thread stack size

例えば:

Java -Xms64m -Xmx1512m

これ thread は役立つかもしれません

また、ulimitを確認します(ulimitは、シェルおよびシェルによって開始されたプロセスで使用可能なリソースを制御します)。

ulimit -a 
3
b13n1u

仮想メモリが不足している可能性があります。

RAM使用(または不足)に焦点を当てていますが、既存のJVMはRAMではなく仮想メモリを予約しています。予約されたメモリのページにアクセスしない限り、RAM使用状況が報告されました。

Linuxは通常、オーバーコミットメント設定によってこの問題を覆っていますが、OSレベルの仮想化環境で実行しているという事実は、オーバーコミットメントを減らす/無効にするか、仮想メモリリソース制御キャッピングを設定する可能性があります。

通常のOSインスタンス(コンテナではない)では、これを回避する最も簡単な方法は、予約済みメモリがRAMを浪費しないようにスワップを追加することです。コンテナーでは、問題を克服する方法として、グローバルに利用可能な仮想メモリーを増やす必要があるかもしれませんが、より一般的には、コンテナーにより多くの仮想メモリーを付与することで簡単に実行できます。

2
jlliagre