web-dev-qa-db-ja.com

「Java Heap Space」および「Out of Memory」を取得するときのEclipseメモリ設定

Eclipseでflex/Javaプロジェクトを起動して実行しようとすると、Eclipse、Tomcat、JREを使用して「メモリ不足例外」と「Javaヒープスペース」を取得し続けました。

メモリ設定を調整しようとして調査中に、これらを調整するための3つの場所を見つけました。

  • Eclipse.ini

  • [ウィンドウ]> [設定]の下の[JRE設定]

  • Catalina.shまたはCatalina.bat

これらの異なる場所で-xmsと-xmxを設定することの違いは何ですか?

これらのメモリ設定がそれに応じて設定されていることを確認する方法はありますか?

2GBのRAMを搭載したコンピューターに最適な-xmsおよび-xmx設定は何ですか?

他のメモリのヒントはありますか?

ありがとう。

58
Brandon

-xmsは開始メモリ(VM start))、-xmxはVMの最大メモリです

  • Eclipse.ini:VM Eclipseを実行するためのメモリ
  • jre設定:JavaプログラムをEclipseから実行するためのメモリ
  • catalina.sh:Tomcatサーバーのメモリ
52
Vinze

まず、コンポーネントが「メモリ不足例外」をスローする問題を絞り込むことをお勧めします。

これは次のとおりです。

  1. Eclipseそれ自体(疑わしい)
  2. アプリケーション under Tomcat

JVMパラメーター-xmsおよび-xmxは、ヒープの「開始メモリ」と「最大メモリ」を表します。 「開始メモリ」を忘れてください。これは今では役に立ちません。アプリがこのメモリ量を急速に消費することが確実な場合にのみ、このパラメータを変更してください。

本番環境では、変更できるパラメーターは-xmx Catalina.shまたはCatalina.batファイルの下。ただし、Tomcatの構成済みデバッグ環境を使用してEclipseから直接webappをテストする場合は、[デバッグ構成]> [Apache Tomcat]> [引数]> [VM引数]に移動して、-xmx そこ。

最適な-xmx 2ギガバイトの場合、これは環境の多くとアプリが行うリクエストの数に依存します。 500MBから1GBまでの値を試します。 OS仮想メモリの「ゾーン」制限およびJVM自体の制限を確認してください。

14
bruno conde

このケースでは2つの問題が見つかりました。

  1. メモリが停止していたため、スタートアップのpermサイズをより高い値に設定する必要がありました。メモリを割り当てるよりも速くメモリを使用していたと思います。私たちの場合には。 -XX:PermSize = 256m -XX:MaxPermSize = 256m

  2. Clearcaseを使用しており、Rational Clearcase SCM(7.0.0.2)のプラグインがEclipseで使用されました。プラグインは、Eclipseがクラッシュした理由のケースでした。そして、現時点では理由はわかりませんが、他の人にとっては知っておくと良いでしょう。強制的に無効にしました。

3

FLashBuilderは、新しいバージョンをリリースしようとしたり、「Mark Occurrences」および「Link with editor」機能を悪用したりすると常にクラッシュします。

この手順に従うことで、フラッシュのパフォーマンスが大幅に向上しました http://www.redcodelabs.com/2012/03/Eclipse-speed-up-flashbuilder/

特に、FlashBuilder.iniを次の構成に設定することにより

-vm
C:/jdk1.6.0_25/bin
-startup
plugins/org.Eclipse.equinox.launcher_1.2.0.v20110502.jar
–launcher.library
plugins/org.Eclipse.equinox.launcher.win32.win32.x86_64_1.1.100.v20110502
-product
org.Eclipse.epp.package.jee.product
–launcher.defaultAction
openFile
–launcher.XXMaxPermSize
256M
-showsplash
org.Eclipse.platform
–launcher.XXMaxPermSize
256m
–launcher.defaultAction
openFile
-vmargs
-server
-Dosgi.requiredJavaVersion=1.5
-Xmn128m
-Xms1024m
-Xmx1024m
-Xss2m
-XX:PermSize=128m
-XX:MaxPermSize=128m
-XX:+UseParallelGC

私のハードウェア構成は、Intel i3 CPU、4GB DDR3、Windows 7 64Bitです。

2

EclipseのTomcatは、catalina.shまたはbatを使用しません。管理されたTomcatのメモリをセットアップするには、VMサーバー実行構成の設定

2
chro

これらの設定があります:

-vmargs
...
-Duser.name=...
-XX:PermSize=256m
-XX:MaxPermSize=256m
-Xmn128m
-Xms256m
-Xmx768m

PermSizeをMaxPermSizeに設定する前に、Eclipseがランダムにクラッシュしました。

1
dmatej

正当な理由から、いくつかの異なるメモリ設定があります。

Eclipseのメモリ設定は、Eclipseが大きなJavaプログラムであるためです。いくつかのプロジェクトで大量のファイルを開く場合は、Eclipseを提供する必要があります。これは、多くのファイルハンドルまたはインターフェイスを通常使用しない個人用プロジェクトの「エンタープライズ」システムでのみ発生する問題です。

JRE設定は、プロジェクトを実行するときにJavaランタイムを許可するRAMの量です。これはおそらく、メモリを占有するアプリケーションを実行しているときに必要なものです。いくつかのRAMが必要で、JREに大丈夫だと伝えなければなりませんでした。JVMは、プログラムが漏れやすい暴走状態にあると仮定し続けましたが、意図的にそれを行い、使用できることを具体的にJVMに伝えなければなりませんでした。

次に、Catalinaのメモリ設定は、アプリケーションサーバーTomcat用です。そのサーバーには、各アプリケーションと同時ユーザー用のメモリが必要です。プロジェクトがWebアプリケーションである可能性があり、どれがメモリを必要とするのかわからないので、これはJRE番号と調和します。

1
Karl

また、Eclipseのメモリにいくつかの問題がありますが、実際の実行時ではなく、Eclipseがリフレッシュ(手動または自動)を実行しているとき、または構築しようとするとEclipseがクラッシュしてシャットダウン。

ログにはいくつかの情報があります。

Heap
 def new generation   total 36352K, used 11534K [0x10040000, 0x127b0000, 0x14f00000)
  eden space 32320K,  29% used [0x10040000, 0x10994c30, 0x11fd0000)
  from space 4032K,  49% used [0x123c0000, 0x125aed80, 0x127b0000)
  to   space 4032K,   0% used [0x11fd0000, 0x11fd0000, 0x123c0000)
 tenured generation   total 483968K, used 125994K [0x14f00000, 0x327a0000, 0x50040000)
   the space 483968K,  26% used [0x14f00000, 0x1ca0ab38, 0x1ca0ac00, 0x327a0000)
 compacting perm gen  total 58112K, used 57928K [0x50040000, 0x53900000, 0x60040000)
   the space 58112K,  99% used [0x50040000, 0x538d2160, 0x538d2200, 0x53900000)
No shared spaces configured.

これらの値を使用するようにEclipse.iniを調整しても、適用されないようです。

-showsplash
org.Eclipse.platform
--launcher.XXMaxPermSize
1024M
-framework
plugins\org.Eclipse.osgi_3.4.2.R34x_v20080826-1230.jar
-vmargs
-Dosgi.requiredJavaVersion=1.5
-XX:MaxPermSize=256m
-Xms512m
-Xmx1024m

この問題を以前に見たことがありますか?
追加されるプロジェクトは非常に大きいです。

1

Antに割り当てられたメモリを増やすか、fork = trueパラメータを追加することで解決できないnot非常に大きなFlexプロジェクトをビルドしようとしたときに、Antでヒープスペースの問題が発生しました。最終的にはFlex 3.4.0 SDKのバグになりました。開発者にSDKバージョンをポーリングし、3.3.0に戻した後、私はついにこれを理解しました。

好奇心のために。

「get/set maskTrackSkin」が追加された追加のアクセサーペアを持つInterfaceファイルまでバグを追跡しました。追加の関数がインターフェイスに追加され、さらに悪いことに、インターフェイスがヒープスペースエラーを取得していたプロジェクトになかった場合、ヒープスペースエラーが発生しました。これが誰かを助けることを願っています。

0
PRangel

メモリ不足が発生した場合は、それがもっともらしいかどうかを検討してください。本当に多くのメモリが必要ですか?そうでない場合(つまり、巨大なオブジェクトがなく、何らかの理由で何百万ものオブジェクトを作成する必要がない場合)、メモリリークが発生する可能性があります。

Javaでは、これは、オブジェクトをもう必要としなくても、どこかへの参照を保持していることを意味します。これの一般的な原因は、リソース(ファイル、DB接続、ステートメント、結果セットなど)でclose()を呼び出すのを忘れていることです。

メモリリークが疑われる場合は、プロファイラーを使用して、使用可能なすべてのメモリを占有しているオブジェクトを見つけます。

0
Aaron Digulla

Adobe Flash Builder 4.6 Read Me.pdfでは、次の設定が含まれるように、EclipseインスタンスのEclipse.iniファイルを編集することをお勧めします。

-vmargs -Xms256m -Xmx512m -XX:MaxPermSize=256m -XX:PermSize=64m
0
Tarun