web-dev-qa-db-ja.com

制限Java Playフレームワークのヒープスペースをグローバルに

私は非常に古いLinuxシステムをインストールしており、Javaとフレームワークをプレイしています。Javaを実行すると、次のようになります。

Java -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

だから私はJava application.confのヒープスペースを制限しました:

jvm.memory=-Xmx256M -Xms256M

その設定でプレイテスト、プレイランなどを実行できます...

しかし、私は実行できません:

play dependencies 
~        _            _ 
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/   
~
~ play! 1.2.1, http://www.playframework.org
~
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

Java Playのフレームワークのヒープ領域をグローバルに制限できるグローバル構成ファイルまたは環境変数はありますか?

pdate:また、以下は機能しません。

play dependencies -Xmx256M -Xms256M
~        _            _ 
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/   
~
~ play! 1.2.1, http://www.playframework.org
~
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

更新2

メモリ:

ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
pending signals                 (-i) 1024
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 38912
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

制限:

cat /proc/meminfo 
MemTotal:      4139312 kB
MemFree:        332988 kB
Buffers:        105252 kB
Cached:        1705644 kB
SwapCached:          4 kB
Active:        2566216 kB
Inactive:       625032 kB
HighTotal:      786432 kB
HighFree:         1728 kB
LowTotal:      3352880 kB
LowFree:        331260 kB
SwapTotal:     4192956 kB
SwapFree:      4168224 kB
Dirty:             368 kB
Writeback:           0 kB
Mapped:        1672180 kB
Slab:           570864 kB
CommitLimit:   6262612 kB
Committed_AS:  4075144 kB
PageTables:      19884 kB
VmallocTotal:   303096 kB
VmallocUsed:     10400 kB
VmallocChunk:   292648 kB

BR、

レネ

32
reen

もっとググった後、私は this ディスカッションを見つけました。問題は、私のLinuxシステムがopenvzコンテナーで実行されていることです。

Java不平を言う理由は、起動時に、マシンに2 GBを超えるRAMが搭載されているため、サーバーモードで起動するためです。すべてのメモリを割り当てようとしますが、VPS内にあるため失敗します。

Java起動時の問題を修正するには、/ usr/Java/jdk1.6.0_26/jre/lib/i386/jvm.cfgを次のように変更します。

-client IF_SERVER_CLASS -server
-server KNOWN
-hotspot ALIASED_TO -client
-classic WARN
-native ERROR
-green ERROR

に:

#-client IF_SERVER_CLASS -server
-client KNOWN
-server KNOWN
-hotspot ALIASED_TO -client
-classic WARN
-native ERROR
-green ERROR

これで、任意の再生コマンドを実行できます。これは、コンテナーベースの仮想化に関連する同様の問題を抱えている他の人々を助けるかもしれません。

BR、ルネ

19
reen

Playが依存関係のjvm.memory設定やテストコマンドを取得していないようです。特定のJVM設定を使用するように強制する1つの方法は、_Java_OPTIONSを使用することです。

例えば:

export _Java_OPTIONS="-Xms800m -Xmx1500m -XX:PermSize=64m -XX:MaxPermSize=256m"
play test

または

play deps

そして、あなたは見るべきです

~        _            _ 
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/   
~
~ play! 1.2.3, http://www.playframework.org
~ framework ID is test
~
~ Running in test mode
~ Ctrl+C to stop
~ 
Picked up _Java_OPTIONS: -Xms800m -Xmx1500m -XX:PermSize=64m -XX:MaxPermSize=256m
Listening for transport dt_socket at address: 8000

これは、これらの設定をすべてのJavaプログラムが_Java_OPTIONSが設定されている端末で実行される場合に)適用することに注意してください。

23
Ayush Gupta

Fedoraを実行しているラップトップでこれに遭遇し、対話型シェルを単に起動したときにPlay 2.0を使用しました。ビルドスクリプトがデフォルトでメモリ値をかなり高い値に設定していることがわかりました。

これを修正するには、$play_dir/framework/buildスクリプトを編集し、値を手動で変更する必要がありました。スクリプトの最後で、次のように起動します。

Java ${DEBUG_PARAM} -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M ...

-Xmx/-Xmsの値(および場合によってはpermgen)を適宜変更するだけです。

6
bpedman

Play 2.2およびJava 7では、これが私が使用したものです。

$ target/universal/stage/bin/foo -mem 256 -J-server

-memの詳細については、以下を参照してください。

$ target/universal/stage/bin/foo -h
3
angelokh

コンピュータにJavaを実行するのに十分なRAMがありません。Javaには少なくとも64MBのRAMが必要です。

-XmsをJavaに指定しても、コンピュータに空きメモリを追加することはできません。Javaメモリモジュールをメインボードに追加できません。-Xmsは、 Java利用可能な容量RAMを使用します。それが失敗した場合(= OSはJavaがそれを割り当てる)、あなたは上記のエラーが発生します。

私の推測では、スワップ領域はありません。 cat /proc/meminfoの出力を見てください。または、各プロセスが割り当てることができるメモリの量を制限するulimitセットがあります(確認するにはulimit -aを試してください)。

3
Aaron Digulla

実行するplayコマンドは、実際には他のPlayフレームワークを呼び出すPythonスクリプトであり、最終的にJavaコマンドをサブプロセスとして呼び出すpythonモジュールです。

dependenciesコマンドの 実行するコードのソースコード を見ると、環境変数をロードするロジックや、最大ヒープサイズを-Xmx引数。つまり、このスクリプトでJVMを呼び出すPlayのPythonコードは、デフォルトから最大ヒープサイズを指定する方法がありません。

2
matt b

私は同じ問題に直面しました。 --XX:MaxHeapSizeを増やして割り当てを増やしてみてください。これがpath/to/framework/buildの私の設定です

Java -Xms512M -Xmx1300M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M -XX:MaxHeapSize=512m...
0
MasterV

Playは-XXオプションを認識しません。代わりに-DXを使用してください。

0
piyushGoyal