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.logとhs_err_pid7057.logがアプリ ディレクトリ (リンク) に表示されました。
アプリで使用されるネイティブ ライブラリがいくつかあります。
実行
して、この結果jcmd 8749 VM.native_memory detail
を得ました。VM は、その時点で約 2 GB のメモリを使用していました。
この行を削除すると、リークが消えます。
Kryo kryo = new Kryo();
return kryo.copy(gameWorld);