0

Oracle Java を使用して、Ubuntu 12.04.3 x64 VPS で Java アプリを実行しています。数分後、OS によってプロセスが強制終了されます。コンソールに「killed」と表示されます。

クラッシュの前に、TOP (数ギガバイトの仮想メモリ) を使用して過度のメモリ使用量を確認できます。リークを調べるために、Java VisualVM をインストールし、jstatd を介してリモートで接続しました。漏れの兆候は見られません:

  • ヒープサイズ: 10 MB
  • PermGen スペース サイズ: 20 MB
  • スレッド: 5
  • 読み込まれたクラス: 815

数回試行した後、hs_err_pid7071.loghs_err_pid7057.logがアプリ ディレクトリ (リンク) に表示されました。

アプリで使用されるネイティブ ライブラリがいくつかあります。

実行 して、この結果jcmd 8749 VM.native_memory detailを得ました。VM は、その時点で約 2 GB のメモリを使用していました。

この行を削除すると、リークが消えます。

Kryo kryo = new Kryo();
return kryo.copy(gameWorld);

このメソッドのドキュメント

4

1 に答える 1

0

hs* ファイルに次の行があります。

メモリ: 4k ページ、物理 502752k (空き 372080k)、スワップ 0k (空き 0k)

お使いのマシンの空きメモリが約 370M しかないというのは本当ですか? そして、「jvm_args: -Xms1g」で JVM プロセスを開始しようとしていますか? この 1G はどこから来るのでしょうか?

于 2014-01-13T09:52:04.780 に答える