2017-12-03 6 views
1

Apacheサーバーで.jarを実行したいとします。Apacheサーバー上で.jarを実行しているのにメモリ不足のエラー

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

私も持っている:私はエラーを取得し、しばらくして

java -jar "JAR_FILE_PATH" 

:私はそれを実行しようとすると

(私のホストが...ようにcPanelのサポートを提供して) -Xmx16m - Xmx2Gで実行しようとしましたが、同じエラーが発生しました。

enter image description here

たぶん私はデフォルト値を設定することができ、いくつかのCMDSがありますが、私はまだnoobのだ、これが初めてです... :)

誰がどんな考えを持っていますか?

+1

「Apacheサーバーで.jarを実行したい」_ - 説明してください。 [Apache](https://httpd.apache.org/)はHTTPサーバーです。 '.jar'を実行すると何が関係しますか? –

+0

これは私が一度に取り組んだBEアプリケーションです。もちろん、それは角度4に基づくFE面を持っています。私が知る限り、理論的にはApache上で動作することができます。それとも偽ですか? –

+0

これは説明を追加しません。 ApacheはHTTP経由でファイルを提供します.PHPやCGIなどのプラグインを介して実行することもできます。あなたの '.jar'は何を行い、どのように適合しますか?質問がどうすれば 'を実行するのですか?Apacheを実行しているサーバー上で「jar」を実行すると、Apacheの部分は間違いなく無関係になります。 –

答えて

0

OutOfMemoryError: unable to create new native threadは、ネイティブのスレッドを生成するメモリが不足していることを意味します。ヒープスペースとはまったく異なることに注意してください。

エラーが発生する最も一般的なケースは、スタック領域、アドレス空間、またはmax user processesが不足していることです。ほとんどすべてのケースは、あまりにも多くのスレッドを作成することに関連しています。

  1. stack space(Linuxの場合)はulimit -sで確認できます。各Javaスレッドは一定量のスタックサイズを消費します。 -Xssまたは-XX:ThreadStackSize=... を使用して設定することができますjava -XX:+PrintFlagsFinal -version | grep ThreadStackSizeを使用して、ご使用のプラットフォームのデフォルトのスタックサイズを確認できます。 ThreadStackSizeStackOverflowErrorのコストで減らすことにより、実際に深いスタックが必要な場合に備えて、さらにスレッドを絞ることができます。
  2. address spaceは、32ビットJVMを使用する場合の問題です。あなたのスクリーンショットによると、は、32ビットJVMを使用するです。したがって、4Gの合計アドレススペースで制限されています。これにはすべてのもの(ヒープ、非ヒープ、スタック、ネイティブなどのメモリ)が含まれます。つまり、ヒープ(-Xmx)の割り当て量が増えるほど、作成できるスレッドが少なくなります。 Linux上など、
  3. max user processesを64ビットのJVMを使用するか、またはヒープサイズを減らすのいずれかがある 回避策はulimit -uを経由して監視することができます。 「デフォルト」のプロセス数が1000プロセスの場合、各スレッドがその限界値AFAIKに達するたびに簡単にヒットできます。解決策は限界を増やすことです。

通常、-XX:+HeapDumpOnOutOfMemoryErrorを追加し、ヒープダンプを収集し、使用されるスレッドの数を確認することをお勧めします。スレッド数が正常な場合(例えば100未満)、設定を確認したい(上記1-3)。スレッド数が非常に多い場合(例えば100を超える場合)は、不具合を見つけて修正することができます。

関連する問題