1

私はtomcat7を使用しています。私のウェブアプリには以下が含まれています:

  • 休止状態
  • log4j
  • jdom
  • jarをアップロード
  • mysqlドライバー
  • ..。

libの合計は30個のjarファイルです。私のホスティング業者は、「プログラムに大量のメモリが割り当てられています(Perm genおよびヒープ用)。消費されるメモリの量を減らしてください」と述べています。

プログラムのメモリ要件を減らすにはどうすればよいですか?

パーマ生成メモリをどのように減らすことができますか?

私を助けてください。

4

1 に答える 1

0

おそらく最初にメモリプロファイラを接続して、使用されているメモリの種類とその理由を確認する必要があります。この質問への回答には、試すことができるプロファイラーがたくさんリストされています。

ヒープは、Javaでオブジェクトを格納するために割り当てるすべてのメモリです。「new」を使用するたびに、ヒープに割り当てます。メモリへの最後の参照がクリアされてからしばらくすると、メモリはガベージコレクションになります。ヒープの使用量を減らすために行う可能性のある一般的な操作は次のとおりです。メモリ内の解析APIからストリーミングAPIに切り替えます。おそらく、JDOMの代わりにStAXまたはSAXを使用します。オブジェクトが不要になったらすぐにfinallyブロックでクリーンアップすることにより、メモリリークまたは単に必要以上に長いオブジェクトの保持を修正します。SQLクエリを最適化して、必要なデータのみをアプリに返すようにします。おそらく、最大行制約またはより制限的なwhere句を追加します。アップロードのサイズを制限し、メモリに保持するのではなく、ディスク上の一時ファイルにストリーミングします。

パーマ世代は「パーマネントジェネレーション」です。通常、perm genのメモリは、JVMが終了するまで解放されません。これは主に、ロードされたクラスを格納するために使用されます。したがって、ロードするクラスを少なくするためにできることはすべて、ここで役立ちます。ロードするクラスの数を減らす方法は次のとおりです。同じjarの複数のバージョンを使用しないようにしてください。WEB-INF / libよりもTomcatのlibディレクトリまたは共有libディレクトリを優先して、可能な限り広いコンテキストでjarをロードしてみてください。TomcatでWebアプリケーションをリロードするたびに、すべてのクラスの古いバージョンがアンロードされるのではなく、新しいバージョンがロードされるだけなので、Webアプリケーションのリロードを最小限に抑えます。

于 2012-06-10T12:31:37.730 に答える