最近のJavaアプレットは人気のあるWebテクノロジーではありませんが、Java仮想マシンをLinuxサーバーに直接デプロイする理由は無数にあります。 Linux javaコマンドをディスクリートハードウェア上または独自のVM内で完全に実行しようとすると、「VMの初期化中にエラーが発生し、オブジェクトヒープ用の十分なスペースを予約できませんでした」というメッセージが表示される場合があります。
コマンドを実行するのに十分なRAMがある可能性が高いため、これはおそらくかなり奇妙に見えますが、これは主に、物理メモリページと仮想メモリページの使用方法における特定の癖によるものです。比較的大きなサイズを指定すると、このメッセージを完全にバイパスして、他の方法と同じようにjavaコマンドを実行できます。
方法1:コマンドラインオプションを使用する
Javaを実行しようとしてこのメッセージが表示された場合は、おそらくすでにfreeコマンドを実行して、プログラムを実行するための十分なメモリが確保されていることを確認しています。
テストマシンには2.3GBの物理RAMがあり、仮想メモリの1ページはまだ使用されていないことに注意してください。メモリが不足していることに気付いた場合は、実行中の他のものを閉じてから再試行することをお勧めします。一方、空きメモリが十分にあることに気付いた人は、サイズを直接指定してみることができます。
たとえば、私たちのマシンでは、コマンドをjava -Xms256m -Xmx512Mとして実行でき、それ以外の場合は期待どおりに機能しました。これにより、Java仮想マシンが起動時に予約しようとするヒープサイズが制限されます。制約のない仮想マシンは、仮想的に異常なことを行う可能性があるため、それ以外の場合は無料のシステムでエラーメッセージをスローする可能性があります。適切な組み合わせを見つける前に、これら2つの値を試してみることもできます。
JVMは、GNU / Linuxの実行に使用している可能性のあるVMのタイプとは関係がないため、これは、実行している対象に関係なく問題になる可能性があります。
方法2:変数をエクスポートして変更を永続的にする
有効な値を見つけたら、それをエクスポートして、そのセッションで永続的にすることができます。たとえば、bashコマンドプロンプトからexport _JAVA_OPTIONS = ’-Xms256M -Xmx512M’を使用すると、サーバーからログアウトするまで、他のオプションなしでjavaコマンドを単独で実行できました。
別のセッションにログインしたときに再度実行する必要があったため、javaコマンドを頻繁に使用する予定がある場合は、関連する起動スクリプトに追加することをお勧めします。 .bash_loginファイルにこの行を追加したところ、ログインプロンプトを使用するたびに、再度実行しなくても機能するようでしたが、別のシェルで作業している場合は、別の場所を探す必要があるかもしれません。
特定のハードウェア構成のみがこのエラーメッセージをトリガーすることに気付いたかもしれません。これは通常、大量の物理RAMを搭載しているが、使用方法の上限が低いマシンで発生するためです。 Javaは、巨大なブロックを割り当てようとしますが、それができないと言われるだけで、メモリが不足していると解釈します。
方法3:現在のJavaオプションを印刷する
コマンドラインで作業していて、現在_JAVA_OPTIONS値を設定しているものへのクイックリファレンスが必要な場合は、echo $ _JAVA_OPTIONSを実行するだけで、現在の値がすぐに出力されます。これは、試すべき正しい数字を見つけようとしているときのトラブルシューティングに役立ちます。
この修正では他の操作は必要ありませんが、仮想メモリのショートエンドに本当に気付いた場合、Javaは「オブジェクトヒープ用に十分なスペースを予約できませんでした」というメッセージをスローすることに注意してください。この場合は、現在実行中のプロセスを再確認し、可能であればサーバーを再起動することをお勧めします。より多くのスワップスペースを作成することもできますが、これが問題である場合は、通常、他の方法で修正することをお勧めします。
まれに、設定が正しいように見えても機能しない場合は、64ビットJavaパッケージがインストールされていることを確認してください。この問題の影響を受けないはずです。連続したメモリ要件は、32ビットバージョンのJavaにのみ適用されます。いくつかのケースで、64ビットバージョンが32ビット仮想マシンを作成しようとしたため、コマンドラインで-d64オプションを指定すると修正されました。
読んだ3分