重複の可能性:
ubuntuのjvmプロセスメモリを制限する
私のアプリケーションでは、ドキュメントをサーバーにアップロードしています。サーバーはそれを分析します。
今日は、jconsole.exeとヒープダンプを使用してアプリケーションを分析し、メモリの問題やメモリリークが発生していないかどうかを調べました。アプリケーションの実行中にアプリケーションがRAM上で非常に大きくなるため、1つ問題が発生する可能性があると思いました。
いくつかの実行後にjconsoleでヒープ/コードキャッシュ/パーマ生成などのメモリを見ていたので、次のことを見て驚いた。
画像リンク:https ://www7.pic-upload.de/13.06.12/murk9qrka8al.png
右側のjconsoleでわかるように、ヒープは、分析関連の処理を行っているときに増加していますが、作業が終了すると、通常のサイズに再び減少しています。左側には、アプリケーションがデプロイされているサーバーの「htop」が表示されます。RAMは正常に動作し、ガベージコレクターは正しく実行されているように見えますが、ほぼ3.2GBと非常に高くなっています。
これは今、私を本当に混乱させています。私のJavaVMスタックがこれで何かをしなければならないのではないかと考えていましたか?私はいくつかの調査を行い、私が見つけたものは、わずか数メガバイト(またはわずかkb)の小さなメモリとしてのvmスタックについて話しました。
私の技術的背景:
- アプリケーションはglassfishv.3.1.2で実行されています
- データベースはMySQLで実行されています
- HibernateはORMフレームワークとして使用されます
- Javaバージョンは1.7.0_04です
- VAADINを使用して実装されています
- このサーバーで実行されているのはMySQLデータベースとGlassfishだけです。
- 分析中にJAXBを使用してXML-DOMスタイルのドキュメントを作成し、データベースに保存しています
- アップロードされるドキュメントは、.txtファイルまたは.pdfファイルのいずれかです。
- OSはLinuxです
解決?
なぜこれが起こるのか、そしてそれを修正するために私ができることについて何か考えがありますか?メモリの問題は、ヒープが爆発する原因となるメモリリークが原因であると思っていたので、現時点では本当に驚いています。しかし、今では、ヒープは問題ではありません。ヒープが同じレベルにある間、RAMがどんどん高くなります。そして、私はそれを解決するために何をすべきかわかりません。
あなたが私と共有しているすべての考えに感謝します。
編集:たぶん、この振る舞いが現在、他の人に私のアプリケーションを実際に使用させることを不可能にしていることも述べておく必要があります。RAMがいっぱいになり、サーバーが応答しなくなったとき、私は外出します。
Edit2:さらに分析が成功するたびに、このRAMが増え続けることも付け加えておきます。