OpenVZサーバでJavaを起動すると「Could not reserve enough space for object heap」エラーが発生する

| | コメント(0) | トラックバック(0)

概要

OpenVZ (Virtuozzo) サーバ内で Java を起動する際、メモリに余裕があるにも関わらず、以下のエラーメッセージが出力されることがある。
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

原因

アプリケーションに割り当てられるプライベートメモリの上限に引っかかっている。

root で以下のコマンドを実行する。

# cat /proc/user_beancounters
Version: 2.5
    uid  resource                held          maxheld          barrier                limit      failcnt
  1838:  kmemsize            33351771         47149056        215981162            237579278            0
         lockedpages             9727             9727            10545                10545            0
         privvmpages           410414           892808          1048576              1048576          345
         shmpages               11162            11818           255834               255834            0
         dummy                      0                0                0                    0            0
         numproc                  115              198             5272                 5272            0
         physpages             216325           429549                0              1048576            0
         vmguarpages                0                0           524288               524288            0
         oomguarpages          100958           257789           426391  9223372036854775807            0
         numtcpsock                56               79             5272                 5272            0
         numflock                   3               15             1000                 1100            0
         numpty                     4                4              160                  160            0
         numsiginfo                 0               51             1024                 1024            0
         tcpsndbuf             629496          1823912          5039960              7199372            0
         tcprcvbuf            1024856          2261032         50399608             71993720            0
         othersockbuf          174424           321944          2519980              4679391            0
         dgramrcvbuf                0            26456         25199804             25199804            0
         numothersock             194              224             5272                 5272            0
         dcachesize          16874504         32772941         47171603             48586752            0
         numfile                 1404             1775            84352                84352            0
         dummy                      0                0                0                    0            0
         dummy                      0                0                0                    0            0
         dummy                      0                0                0                    0            0
         numiptent                 38               38              200                  400            0
ここで、privvmpages 行の failcnt 値が上昇していることが確認できる。
各パラメータの意味は 【OpenVZ】リソース パラメータ が詳しい。

[VPS] Virtuozzoのメモリはfreeやtopでなくてprivvmpagesを見るべし を参考に、使用できるメモリ量を確認すると、
beans=`cat /proc/user_beancounters | grep priv`
max=`echo $beans | awk '{ print $4;}'`
use=`echo $beans | awk '{ print $2;}'`
let "per=$use*100/$max"
let "mb=$use/256"
let "mmb=$max/256"
echo "privvmpages usage: $mb MB ($per% of $mmb)"
このサーバの場合は
privvmpages usage: 1606 MB (39% of 4096)
となった。

対策

その1: Java の使用メモリを減らす

Java の起動オプションで
java -Xmx1024m -Xms512m
の箇所を調整する。

その2: VPS の privvmpages 値を増やす

レンタル VPS サーバではなく自前で VPS サーバを立ち上げている場合、設定ファイルで privvmpages 値を増やすことができる。
詳細は OpenVZ VPS and Java Memory Error and how to fix it を参照。

参考文献

トラックバック(0)

このブログ記事を参照しているブログ一覧: OpenVZサーバでJavaを起動すると「Could not reserve enough space for object heap」エラーが発生する

このブログ記事に対するトラックバックURL: http://trasis.jp/cgi-bin/mt/mt-tb.cgi/514

コメントする

2012年9月

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30