Linuxサーバー(CentOS)にメモリの問題があります。仮想マシンです。ここに文脈があります。
RAMは70GBです。 2つのTomcatが実行されています。
一方のTomcatには13Gbヒープが割り当てられ、もう一方のTomcatには20Gbヒープが割り当てられます。
JVMオプション-Xss160k設定を使用した20Gb(トラブルシューティングのため)
これら2つのTomcatは最大48 GBのRAM(仮想)を使用できます。
Linuxは70Gbを使用し、約35Gbのキャッシュメモリを持っています。スワップスペースは1Gbですが、ほとんど使用されません(8Mb)。
これで問題は、Tomcatで次のエラーが引き続き発生することです。
OutOfMemoryError: unable to create new native thread
私の記憶が正しい場合、オペレーティングシステム自体にメモリが不足して新しいスレッドを作成できない場合、これが発生する可能性があります。
今質問は35GBのキャッシュメモリを持っていますが、どのようにこれが可能ですか?必要に応じて再割り当てして使用する必要はありませんか?
これを防ぐために設定できるカーネルオプションはありますか?たとえば、最大65Gbを使用し、30Gbをキャッシュし、5Gbを空にすることができます。
答え1
これはulimitによって設定された制限の問題かもしれません。 tomcatを実行しているユーザーとして、次のタスクを実行します。
ulimit -a
出力で行を見つけますmax user processes
。
max user processes (-u) 1024
Tomcatを起動する前に、この値を増やしてみてくださいulimit -u 4096
。
答え2
Xと同じRAMを使用できることを確認する方法を見つけました。
sysctl -w vm.min_free_kbytes=...
これが私の問題を解決するのか、それともJenny Dの答えが解決するのかはまだわかりません。
答え3
Xms,Xmx,PermSize MaxPermSize
Catalinaファイルの値は何ですか?多くの場合、これらのパラメータを調整すると、JVMメモリ不足の問題を回避できます。