5

私の目標:

1000 人のユーザーに対してアプリケーションを実行したいと考えています。

100ユーザーで実行しようとしています。アプリケーションの実行中に、ユーザーごとに少なくとも 1 時間かかるプロセスを実行したいので、ユーザーごとに 1 つのスレッドを使用しています。

エラー

Caused by: java.lang.OutOfMemoryError: Java heap space

これが何を意味するのかを理解しようとしましたが、解決方法がよくわかりません。

誰でも私を助けることができますか?

4

5 に答える 5

8

このエラーは、JVM が使用できるよりも多くのメモリがプログラムに必要であることを意味します。

したがって、ほとんど 2 つのオプションがあります。

  1. オプションを使用して、プログラムが使用できるデフォルトのメモリを増やし-Xmxます (たとえば、1024 MB: -Xmx1024m) 。
  2. プログラムを変更して必要なメモリを減らし、使用する大きなデータ構造を減らし、プログラムのある時点で使用されなくなったオブジェクトを取り除きます。

Peter Lawrey が指摘したように、プロファイラーを使用して、そのような状況でプログラムが何を行っているかを確認することは、一般的には良い考えです。

于 2012-08-06T07:37:38.710 に答える
5
于 2012-08-06T07:33:21.410 に答える
2

このエラーに関してStackOverflowで提供されたすべての回答と問題が大きく異なることを示す情報も提供していません。

  • メモリの使用量が多すぎるため、メモリ プロファイラを使用して削減する必要があります。
  • -mx最大メモリの設定が低すぎるため、またはを使用して最大メモリを増やす必要があります。-Xmx

1000 人のユーザーにそれぞれ 1 時間かかるプロセスを実行させたいので、手持ちよりも多くのリソースが必要になるのではないかと思います。たとえば、おそらく1000コアですか?CPU、メモリ、ディスク IO、およびネットワーク IO に基づいて、必要なハードウェアの量を検討することをお勧めします。これは、ユーザーを許容レベル (たとえば、20 ユーザーとその 50 倍) で実行するために必要です。

于 2012-08-06T07:33:58.103 に答える
1

メモリ不足エラーが発生した場合は、2つの領域を確認します

  1. -Xmxを使用して増加しない場合でも、JVMに割り当てられたメモリは十分ですか?
  2. コードを徹底的にチェックしてください。90%以上の確率で、境界条件の下でループが再帰的になるというエラーが見つかりました。
于 2012-08-06T07:44:45.577 に答える
1

アプリケーションを起動するときに、JVM ヒープ領域を増やしてみることができます。で2GBに設定してみてください-Xmx2g。32 ビットの Java を実行している場合は 2GB が限界だと思いますが、64 ビットの JVM を使用している場合は、それ以上にできるはずです。

編集:

例:java -Xmx2g MyApp

于 2012-08-06T07:38:46.177 に答える