2017-02-05 2 views
0

Tomcat 7を使用してアプリケーションをデプロイしました。 OutOfMemoryエラーを取得するために、以下のコードを実行します。Tomcat 7のsetenv.shファイルを変更するとJava.lang.OutOfMemoryが解決されない

Long maxMemorySize = Runtime.getRuntime().maxMemory(); 
model.addAttribute("memorySize",maxMemorySize); 
int[] matrixArr = new int[(int) (maxMemorySize + 1)]; 
for(int i = 0; i < matrixArr.length; ++i) 
    matrixArr[i] = i+1; 

エラーが表示されたら、tomcat/binにsetenv.shファイルを作成し、以下のコードを追加します。

export CATALINA_OPTS="-Xms512M -Xmx1024M" 

次に、Tomcatサーバーを再起動してプログラムを再実行します。しかし、再びOutOfMemoryエラーが表示されます。 CATALINA_OPTSのパラメータを変更しますが、機能しません。また、setenv.shファイルに以下のコードを追加することもできますが、動作しません。

export JAVA_OPTS="-Xms512M -Xmx1024M" 

この問題を解決するのを手伝ってください。

+0

[TomcatアプリのJavaヒープスペースを増やす方法]の複製可能性(http://stackoverflow.com/questions/2718786/how-to-increase-java-heap-space-for-a-tomcat -app) – rkosegi

+0

私はあなたが間違ったパラメータを**最大割り当て可能な**ヒープサイズとして指定していると思います。 http://stackoverflow.com/questions/3571203/what-are-runtime-getruntime-totalmemory-and-freememory –

答えて

0

Runtime.getRuntime().maxMemory() JVMが使用しようとする最大メモリ量を返します。
-Xmx1024Mの場合は1024Mを返します。アレイmatrixArrはメモリの1024M*4を割り当てる必要があります。そのため、JVMヒープサイズを増やした後もまだjava.lang.OutOfMemoryの例外があります。

+0

Thanx @beckyangを参照してください。これは解決策を見つけるのに役立ちます。 –

0

Java VM内のすべてのメモリを割り当てることはできません。プログラムコード、クラス定義、およびロードされる多くのクラスの静的フィールドのためのスペースが必要です。

さらに、maxMemoryがバイト単位で値を返している間に、intの配列(1ピースあたり4バイト)を割り当てています。

したがって、maxMemoryが100を返した場合は、100個の整数の配列を割り当てようとします。最小値は400バイトです。

可能なことは、IntBuffer.allocateDirectを使用してJavaヒープ外の領域を割り当てることです。

+0

Thanx @ john16384 –

0

あなたのTomcatサーバーがLinuxマシン上で実行され、リポジトリからインストールされている場合は、/ etc/default/tomcat7を編集します。 JAVA_OPTS行で-Xmxの値を(2048m)に置き換えます。他のすべてを同じままにしておきます。 tomcatを再起動する

関連する問題