web-dev-qa-db-ja.com

Java VM OpenVZの問題

Javaのニーズをホストするためにvpsを購入しました。しかし、Javaを実行できません。Javaは正しくインストールされていますが、Java( "Java -version"など)を実行しようとすると、次のエラーが発生します:

VMの初期化中にエラーが発生しました
オブジェクトヒープ用に十分なスペースを予約できませんでした
Java仮想マシン。
を作成できませんでした

これはJava中心の問題、メモリ不足です。確かにメモリ不足です。vps管理者に連絡しましたが、すべて問題ないとのことです。2GBのRAMがあり、4GBに拡張可能です。この件について少し検索しました。これが私のBEANSファイルです(スクリプトを使用して人間が理解できる形式に変換された数値)。ちなみに、JVMヒープメモリの割り当てはkmemsizeまたはprivvmpagesに依存しますか?単一のプロセスの場合?

resource                     held              maxheld              barrier                limit              failcnt
kmemsize                  2.25 mb              2.35 mb             13.71 mb             14.10 mb                    0
lockedpages                     0                    0           1024.00 kb           1024.00 kb                    0
privvmpages              20.54 mb             21.33 mb            256.00 mb            272.00 mb                  156
shmpages                  5.00 mb              5.00 mb             84.00 mb             84.00 mb                    0
numproc                        13                   14                  240                  240                    0
physpages                 9.36 mb              9.45 mb                    0            MAX_ULONG                    0
vmguarpages                     0                    0            132.00 mb            MAX_ULONG                    0
oomguarpages              9.36 mb              9.45 mb            MAX_ULONG            MAX_ULONG                    0
numtcpsock                      3                    3                  360                  360                    0
numflock                        3                    3                  188                  206                    0
numpty                          2                    2                   16                   16                    0
numsiginfo                      0                    1                  256                  256                    0
tcpsndbuf                69.17 kb             69.17 kb              1.64 mb              2.58 mb                    0
tcprcvbuf                48.00 kb             48.00 kb              1.64 mb              2.58 mb                    0
othersockbuf              6.80 kb              6.80 kb              1.07 mb              2.00 mb                    0
dgramrcvbuf               0.00 kb              0.00 kb            256.00 kb            256.00 kb                    0
numothersock                    9                   10                  360                  360                    0
dcachesize                0.00 kb              0.00 kb              3.25 mb              3.46 mb                    0
numfile                       704                  746                 9312                 9312                    0
numiptent                      10                   10                  128                  128                    0

前もって感謝します!

4
Ginnun

スクリプトが生のbeancountersを正しく変換したかどうかを再確認してください。これによると、RAMは256メガバイトしかなく、管理者が言うように4ギガではありません。

2つの豆だけに集中する:

  • privvmpages-コンテナが割り当てることができるメモリの最大量(予約)
  • oomguarpages-コンテナが実際に使用できるメモリの保証量。ホストのメモリが不足している場合、その量を超えて使用しているものはすべて強制終了されます。

Javaは、メモリの塊を割り当てて、それを使用しないことで有名です。OSを頼りに overcommit 。私の経験では、JVMを確実に実行するには、少なくとも1ギガバイトのprivvmpagesが必要ですが、使用されるのは数十メガバイトだけです。

Javaを実行しているVEにprivvmpagesを実験して封じ込めようとした数か月後、私は個人的に諦めました。バリアを最大に設定し、oomguarpagesを適切に微調整して、最高のものを期待しています;)

VPSLinkでホストされていたときに同様の問題が発生しましたが、Sun/Oracle JVMはOpenVZでは機能しません(VPSLinkフォーラムで古いスレッドを検索して詳細を確認できます)。

結局、OpenVZコンテナーで私のために働いたのはIBM JDKだけでした。これは、 https://www.ibm.com/developerworks/Java/jdk/linux/download.html)で入手できます。

ただし、より良い解決策は、必要なJDKをインストールでき、OpenVZよりもはるかに頭痛の種が少ない専用サーバーに移行することだと思います。

1

試してみてください JRockit VM OpenVZ VPSで完璧に動作し、Sun/Oraclejvmよりもはるかに少ないメモリを消費します。

1
caiiiycuk