強制メモリスワッピング

強制メモリスワッピング

私は本当に手頃な価格のDebianサーバーを持っていますが、何らかの理由でJavaプロセスはすべてのメモリを使用し、スワップスペースを使用する代わりに「OutOfMemoryError」をスローします。

1GBのスワップスペースがあり、何をしてもhtop使用量が表示されます。0/1024M

試してみましたが、sudo sysctl vm.swappiness=100まだスワップスペースは使用されません

追加として、sudo swapon --show以下が表示されます。

NAME      TYPE  SIZE USED PRIO
/swapfile file 1024M   0B   -1

(そしてchmod権限はに設定されています600。)だから、スワップファイルが機能していると思います。

誰にもアイデアがありますか?ありがとうございます!

答え1

私はこれがLinuxの問題ではないと思います。 Javaには、オペレーティングシステムに関係なく、独自のメモリ制限があります。 Java自体の制限により、これらのエラーが発生すると思います。

JVMごとにオプションが異なります。 Debianを使用しているので、OpenJDKを使用している可能性が高いです。それでもOracleのJVMを使用する可能性があります。 OpenJDKのデフォルトの最大ヒープサイズは256MBです。だから、走っていない限り本物RAMが小さい場合やJavaプロセスが多い場合は、スワップを使用する前にJava自体の制限に達する可能性が高くなります。

OracleのJVMを使用している場合は、ここにある回答でより多くの情報を提供できます。https://stackoverflow.com/questions/4667483/how-is-the-default-max-java-heap-size-dependent

Javaプログラムを実行して「最大ヒープサイズ」を調整しようとしています-Xmx。オプションについては後述する。https://wiki.openjdk.java.net/display/zgc/Main


Javaのメモリマネージャがスワップスペースをうまく処理できないことは注目に値します。スワップを過度に使用すると、ガベージコレクタの実行中に定期的な停止が発生する可能性があります。

関連情報