常見OOM問題之Out of swap space交換空間不足問題詳解

本文來自于HeapDump性能社區(qū)! !有性能問題,上HeapDump性能社區(qū)!
正文:

Java 應(yīng)用程序在啟動(dòng)期間獲得的內(nèi)存量有限。此限制是通過 -Xmx 和其他類似的啟動(dòng)參數(shù)指定的。在 JVM 請(qǐng)求的總內(nèi)存大于可用物理內(nèi)存的情況下,操作系統(tǒng)開始將內(nèi)容從內(nèi)存換出到硬盤。

v2-f6e98a6eacd721d4ca5c2d5a6a96f9c5_1440w.png

java.lang.OutOfMemoryError:交換空間?error 表示交換空間也用完了,新的嘗試分配由于物理內(nèi)存和交換空間都不足而失敗。

1,是什么原因造成的?

java.lang.OutOfmemoryError:交換空間?當(dāng)來自本機(jī)堆的字節(jié)分配請(qǐng)求失敗并且本機(jī)堆接近耗盡時(shí),JVM 會(huì)拋出 . 該消息指示失敗的分配的大小(以字節(jié)為單位)以及內(nèi)存請(qǐng)求的原因。

問題出現(xiàn)在Java進(jìn)程已經(jīng)開始交換的情況下,回顧Java是一種垃圾收集語言已經(jīng)不是一個(gè)好的情況?,F(xiàn)代GC 算法做得很好,但是當(dāng)遇到由交換引起的延遲問題時(shí),GC 暫停往往會(huì)增加到大多數(shù)應(yīng)用程序無法容忍的水平。

java.lang.OutOfMemoryError:交換空間不足?通常是由操作系統(tǒng)級(jí)別的問題引起的,例如:

  • 操作系統(tǒng)配置的交換空間不足。
  • 系統(tǒng)上的另一個(gè)進(jìn)程正在消耗所有內(nèi)存資源。

應(yīng)用程序也可能由于本機(jī)泄漏而失敗,例如,如果應(yīng)用程序或庫代碼連續(xù)分配內(nèi)存但未將其釋放給操作系統(tǒng)。

2,解決辦法是什么?

要克服這個(gè)問題,您有幾種可能性。首先也是最簡(jiǎn)單的解決方法是增加交換空間。實(shí)現(xiàn)此目的的方法是特定于平臺(tái)的,例如在 Linux 中,您可以使用以下示例命令序列來實(shí)現(xiàn),這些命令創(chuàng)建并附加一個(gè)大小為 640MB 的新交換文件:

swapoff -a 
dd if=/dev/zero of=swapfile bs=1024 count=655360
mkswap swapfile
swapon swapfile

現(xiàn)在,您應(yīng)該回想一下,由于垃圾收集會(huì)清除內(nèi)存內(nèi)容,因此通常 Java 進(jìn)程不希望交換。在交換分配上運(yùn)行垃圾收集算法可以將GC 暫停的長度增加幾個(gè)數(shù)量級(jí),因此在跳到簡(jiǎn)單的解決方案潮流之前應(yīng)該三思而后行。

如果您的應(yīng)用程序部署在 JVM 需要與之競(jìng)爭(zhēng)資源的“嘈雜鄰居”旁邊,您應(yīng)該將服務(wù)隔離到單獨(dú)的(虛擬)機(jī)器上。

在許多情況下,您唯一真正可行的選擇是升級(jí)機(jī)器以包含更多內(nèi)存或優(yōu)化應(yīng)用程序以減少其內(nèi)存占用。當(dāng)您轉(zhuǎn)向優(yōu)化路徑時(shí),一個(gè)好的開始方法是使用內(nèi)存轉(zhuǎn)儲(chǔ)分析器來檢測(cè)內(nèi)存中的大量分配。

Java OOM系列專題:

第一篇:Java OOM 原理篇 : 什么是 Java OOM

第二篇:Java OOM 基礎(chǔ)篇:常見的OutOfMemoryError 場(chǎng)景一:Java heap space 堆溢出問題詳解

第三篇:Java OOM 基礎(chǔ)篇:常見的OutOfMemoryError 場(chǎng)景二 : GC overhead limit exceeded 問題詳解

第四篇:Java OOM 基礎(chǔ)篇:常見的OutOfMemoryError 場(chǎng)景三: PermGen space 永久空間問題詳解

第五篇:Java OOM 基礎(chǔ)篇:常見的OutOfMemoryError 場(chǎng)景四: Permgen size 元空間問題詳解

第六篇:Java OOM 實(shí)戰(zhàn)篇:應(yīng)用故障之Java heap space 堆溢出實(shí)戰(zhàn)

第七篇:Java OOM 高級(jí)篇:體驗(yàn)了一把線上CPU100%及應(yīng)用OOM的排查和解決過程

第八篇:Java OOM 高級(jí)篇:線上Docker 上Springboot程序OOM問題的排查分享

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容