OutOfMemoryErrorの系列(6):スワップ領域のうち?
HTTPS:// blog.csdn.net/renfufei/article/details/78136638
これは、このシリーズの第六の記事、関連する記事の一覧です。
- OutOfMemoryErrorの系列(1):Javaのヒープスペース
- OutOfMemoryErrorの系列(2):GCオーバーヘッド制限を超え
- OutOfMemoryErrorの系列(3):Permgenスペース
- OutOfMemoryErrorの系列(4):メタスペース
- OutOfMemoryErrorの系列(5):新しいネイティブスレッドを作成できません。
JVMの起動パラメータは、最大のメモリ制限を指定します。 -Xmx
だけでなく、他の関連する起動パラメータ。JVMによって使用されるメモリの総量が利用可能な物理メモリを超えた場合、オペレーティングシステムは、仮想メモリを使用します。
エラーメッセージ スワップ空間のjava.lang.OutOfMemoryErrorを:?うち ショー、スワップ領域(スワップ空間、仮想メモリ)欠損は、物理メモリとスワップスペースに起因するメモリ割り当ての失敗をもたらすには不十分です。
原因分析
ネイティブヒープメモリが使い果たされている場合は、メモリの割り当て、JVMがスローされます スワップ領域のjava.lang.OutOfMemoryErrorを:?アウト エラーメッセージを、このメッセージは、操作を要求しているユーザは、メモリの割り当てに失敗しまし伝えます。
エラーが発生する前にJavaプロセスは、仮想メモリを使用しています。以下のために Javaのガベージコレクション 、これは、シーンに対応することは困難です。でも、現代の GCアルゴリズム は非常に高度な、しかし、仮想メモリのスワップシステムが遅延を引き起こし、メイク GCの一時停止時間は 耐え難い割合に膨らみました。
多くの場合で、オペレーティング・システム・レベルの結果の原因と スワップ領域のjava.lang.OutOfMemoryErrorを:?アウト のような問題:
- オペレーティングシステムのスワップ領域が小さすぎます。
- マシン上のプロセスは、すべてのメモリリソースを飲み込みました。
もちろん、メモリリークは、例えば、プログラム/ライブラリが解放されるべきではない、ローカルメモリを適用していき、によって引き起こされるローカルアプリケーション(ネイティブリーク)であってもよいです。
ソリューション
この問題にはいくつかのソリューションがあります。
仮想メモリのサイズを大きくする最初の、そして最も簡単な方法(スワップ領域)の各オペレーティングシステム用のセットアップ方法は、Linuxなど、同じではありません、あなたは、次のコマンドセットを使用することができます。
swapoff -a
dd if=/dev/zero of=swapfile bs=1024 count=655360 mkswap swapfile swapon swapfile
どのスワップファイル(スワップファイル)の640メガバイトのサイズを作成し、ファイルを有効にします。
ガベージコレクタは、全メモリ空間をクリーンアップするので、そのJavaのGCのための仮想メモリが耐え難いです。メモリスワップがある場合、実行 ガベージコレクション の 休止時間は、 それが仮想メモリを増やすことが最善ではありませんので、百倍、あるいはそれ以上に増加します。
プログラムはまた、環境干渉「悪い隣人効果」を可能にした場合、JVMおよびその他のプログラムはまた、コンピューティングリソースの競合してパフォーマンスを向上させる専用サーバー/仮想マシンに別々の道を展開することです。
時間のほとんどは、私たちにできる唯一のことは、メモリの物理マシンを追加し、サーバー構成をアップグレードしています。もちろん、プログラムは/メモリヒープダンプアナライザの多量によってコード割り当てを検出することができる手段、メモリ空間の量を減少させるために最適化することができます。
オリジナルリンク: https://plumbr.eu/outofmemoryerror/out-of-swap-space
翻訳日:2017年9月27日