6

サーバーの過負荷をシミュレートしていますが、次のエラーが発生します。

java.lang.OutOfMemoryError: unable to create new native thread

このページhttp://activemq.apache.org/javalangoutofmemory.htmlで、メモリサイズを増やすことができることを読みました。しかし、どうすればそれを行うことができますか?どのファイルを変更する必要がありますか?bin / activemqスクリプトで引数を渡そうとしましたが、うまくいきませんでした。

4

5 に答える 5

11

あなたのケースは、膨大な数のスレッドに対応しています。それを解決するには3つの方法があります:

  • スレッドの数を減らします (つまり、ドキュメントでは-Dorg.apache.activemq.UseDedicatedTaskRunner=false )。
  • -Xssオプションでスレッドごとのスタック サイズを減らします (デフォルト値: Win/Linux 上の 32 ビット Java の場合は 320 KiB、Win/Linux 上の 64 ビット Java の場合は 1024 KiB、docを参照) 。
  • ヒープ サイズを減らす (拡張しない) -Xmxオプションを使用して、スレッドごとのスタック用のスペースを確保します (ActiveMQ スクリプトではデフォルトで 512 MiB)。

: スタックまたはヒープが小さすぎる場合は、別のOutOfMemoryErrorが発生する必要があります。

それらは、 ACTIVEMQ_OPTSシェル変数を使用して指定できます(UNIX の場合)。たとえば、ActiveMQ を次のように実行します。

ACTIVEMQ_OPTS=-Xss160k bin/activemq
于 2009-11-27T14:06:35.937 に答える
1

-Xmxコマンド引数を使用して、Java仮想マシンにより多くのメモリを割り当てることができます。
例えば。java -Xmx512M MyClass

于 2009-11-27T13:34:14.097 に答える
1

Linux (RedHat Enterprise 5) システムでこの問題に遭遇し、このビルドで nprocs ulimit が/etc/security/limits.conf実際にユーザーが生成できるスレッドの数を制御していることを発見しました。

コマンドを使用して、この制限を表示できますulimit -a

初期状態では、これは 100 のソフト リミットと 150 のハード リミットに設定されていました。これは、最新の App Server を実行するために必要なスレッドの数にひどく不足しています。
この制限を完全に削除し、この問題を解決しました。

于 2011-08-23T18:00:17.997 に答える
1

ここをチェック

-Xmxたとえば、ActiveMQ - Tomcat を実行している VM に引数を指定します。

于 2009-11-27T13:43:06.640 に答える
0

これはヒープスペースが不足しているようには見えないので、それを増やしないでください(-Xmxオプション)。代わりに、アプリケーションでプロセスメモリが不足しているため、ヒープスペースを減らすと、プロセスメモリがネイティブで使用できるように解放されます。問題は、なぜこれほど多くのプロセスメモリを使用しているのかということです。JNIを使​​用しない場合は、作成したスレッドが多すぎる可能性があります。habeの投稿では、それを修正する方法について説明しています。

于 2009-12-03T12:13:38.587 に答える