私は本当に手頃な価格の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のメモリマネージャがスワップスペースをうまく処理できないことは注目に値します。スワップを過度に使用すると、ガベージコレクタの実行中に定期的な停止が発生する可能性があります。