vb實時錯誤6 溢出_java內存溢出系列(6): Out of swap space?

本文是java內存溢出系列第6小篇。

JVM啟動參數指定了最大內存限制。如?-Xmx?以及相關的其他啟動參數. 假若JVM使用的內存總量超過可用的物理內存, 操作系統就會用到虛擬內存。

a7ca186b797ef24e371593203f7eddd7.png

錯誤信息?java.lang.OutOfMemoryError: Out of swap space??表明, 交換空間(swap space,虛擬內存) 不足,是由于物理內存和交換空間都不足所以導致內存分配失敗。

原因分析

如果 native heap 內存耗盡, 內存分配時, JVM 就會拋出?java.lang.OutOfmemoryError: Out of swap space??錯誤消息, 這個消息告訴用戶, 請求分配內存的操作失敗了。

Java進程使用了虛擬內存才會發生這個錯誤。對?Java的垃圾收集?來說這是很難應付的場景。即使現代的?GC算法?很先進, 但虛擬內存交換引發的系統延遲, 會讓?GC暫停時間?膨脹到令人難以容忍的地步。

通常是操作系統層面的原因導致?java.lang.OutOfMemoryError: Out of swap space??問題, 例如:

  • 操作系統的交換空間太小。

  • 機器上的某個進程耗光了所有的內存資源。

當然也可能是應用程序的本地內存泄漏(native leak)引起的, 例如, 某個程序/庫不斷地申請本地內存,卻不進行釋放。

解決方案

這個問題有多種解決辦法。

第一種, 也是最簡單的方法, 增加虛擬內存(swap space) 的大小. 各操作系統的設置方法不太一樣, 比如Linux,可以使用下面的命令設置:

swapoff -add if=/dev/zero of=swapfile bs=1024 count=655360mkswap swapfileswapon swapfile

其中創建了一個大小為 640MB 的 swapfile(交換文件) 并啟用該文件。

因為垃圾收集器需要清理整個內存空間, 所以虛擬內存對 Java GC 來說是難以忍受的。存在內存交換時, 執行?垃圾收集?的?暫停時間?會增加上百倍,甚至更多, 所以最好不要增加虛擬內存。

如果程序允許環境還受到 “壞鄰居效應” 的干擾, 那么JVM還要和其他程序競爭計算資源, 提高性能的辦法就是單獨部署到專用的服務器/虛擬機中。

大多數時候, 我們唯一能做的就是升級服務器配置, 增加物理機的內存。當然也可以進行程序優化, 降低內存空間的使用量, 通過堆轉儲分析器可以檢測到哪些方法/代碼分配了大量的內存。


232cdfe203702910e7241e6106c0780c.png往期回顧:

java內存溢出系列(1): Java heap space

java內存溢出系列(2): GC overhead limit exceeded

java內存溢出系列(3): Permgen space

java內存溢出系列(4): Metaspace

java內存溢出系列(5): Unable to create new native thread

bc28241c47e6713744f18424e3353322.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532083.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532083.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532083.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java備份還原mysql數據庫_Java備份還原Mysql數據庫

///實體類package com.ews.util;/*** 系統備份展示對象** */public class DataFile {private String fileName;//備份文件的名稱private String fileDate;//備份文件的日期private String filePath;//備份文件的地址private String fileSize;//備份文件的大小public String get…

學pyqt5之前需要學python嗎_快速學習pyqt5(1)--入門

學習于:PyQt5圖形界面編程 想要系統學習的同學建議可以去這個專欄好好學習,沒有任何語言基礎和計算機基礎的也建議直接去看那個專欄。我這里是有java基礎了,所以就不重復,針對快速學習使用。學習這個的目的是完成學校的SIT項目&am…

reboot mysql fail_mysql 5.7.18,在系統重啟后,為什么無法啟動?

度娘也不給力,只好自己研究了。先把結論寫出來吧。把pid文件換個位置,就好了。問題是, mysqld.servce的文件是從mysql的安裝目錄拷貝的,導致沒有懷疑pid文件位置的問題。一開始還懷疑是不是自己在一些文件里拼寫有誤。后來&#x…

mysql 查看鎖_別吵吵,分布式鎖也是鎖

Tomcat是這個系統的核心組成部分, 每當有用戶請求過來,Tomcat就會從線程池里找個線程來處理,有的執行登錄,有的查看購物車,有的下訂單,看著屬下們盡心盡職地工作,完成人類的請求,Tom…

php解析js的 arraybuffer_JS的所謂的第七種數據類型Symbol

首先,為什么說叫所謂呢?因為在2007年之前Js給予我們typeof解析數據類型的一共有六種(一直有爭議,但是我們暫時就按typeof來算)functionNumberObjectbooleanStringundefined但當我們去 typeof Symbol () 的時候,會驚奇的發現&#…

JAVA MYSQL從數據庫中提取圖片_java web將圖片存到儲數據庫和從數據庫中讀取圖片...

(Notice:以下所有經驗也是我根據網上的經驗整理的,如有侵權可以聯系我刪除,Wx:IT_Ezra,QQ 654303408。 有問題討論也可聯系我,QQ同上。)一、分析一下基本流程從前臺頁面獲取圖片,后臺接收圖片文件轉化成數據…

Ubuntu系統如何安裝和卸載CUDA和CUDNN

背景 最近在學習PaddlePaddle在各個顯卡驅動版本的安裝和使用,所以同時也學習如何在Ubuntu安裝和卸載CUDA和CUDNN,在學習過程中,順便記錄學習過程。在供大家學習的同時,也在加強自己的記憶。本文章以卸載CUDA 8.0 和 CUDNN 7.05 …

session.merge 緩存不更新_如何保證緩存與數據庫雙寫時的數據一致性?

在做系統優化時,想到了將數據進行分級存儲的思路。因為在系統中會存在一些數據,有些數據的實時性要求不高,比如一些配置信息。基本上配置了很久才會變一次。而有一些數據實時性要求非常高,比如訂單和流水的數據。所以這里根據數據…

java替換圖片中文字_Java 添加、替換、刪除Word中的圖片

文檔中,可以通過圖文混排的方式來增加內容的可讀性,相比純文本文檔,在內容展現方式上也更具美觀性。在給文檔添加圖片時,可設置圖片的文本環繞方式、旋轉角度、圖片高度/寬度等;另外,也可對文檔中已有的圖片…

kafka如何保證不重復消費又不丟失數據_Kafka寫入的數據如何保證不丟失?

我們暫且不考慮寫磁盤的具體過程,先大致看看下面的圖,這代表了 Kafka 的核心架構原理。Kafka 分布式存儲架構那么現在問題來了,如果每天產生幾十 TB 的數據,難道都寫一臺機器的磁盤上嗎?這明顯是不靠譜的啊!所以說,這…

不允許輸入特殊字符的正則表達式_JavaScript正則表達式常用技巧

正則表達式是用于匹配字符串中字符組合的模式。在 JavaScript 中,正則表達式也是對象。這些模式被用于 RegExp 的 exec 和 test 方法, 以及 String 的 match、matchAll、replace、search 和 split 方法。正則表達式的掌握程度能粗略地看出程序員的技術底子&#xff…

latex 算法_GitHub項目awesome-latex-drawing新增內容(四):繪制貝葉斯網絡

近期,我們整理和開源了一個基于LaTeX的科技繪圖項目,并將其取名為awesome-latex-drawing(GitHub網址為:https://github.com/xinychen/awesome-latex-drawing),案例包括貝葉斯網絡、圖模型、矩陣/張量示意圖…

python123動物重量排序_python進階

面向對象oopclass Student(object):def __init__(self,name,score)self.name nameself.score scoredef print_score(self)print(%s: %s % (self.name,self.score))給對象發消息實際上就是調用對象對應的關聯函數,我們稱之為對象的方法(Method)。面向對象的程序寫出…

mysql中的生日應該是什么類型_MySQL中的定點數類型

上一篇文章我們嘮叨了浮點數,知道了浮點數存儲小數是不精確的。本篇繼續嘮叨一下MySQL中的另一種存儲小數的方式 —— 定點數。浮點數文章閃現:什么, 0.3 - 0.2 ≠ 0.1 ? 什么鬼定點數類型正因為用浮點數表示小數可能會有不精確的情況,在一些…

python怎么制作圖像_python數字圖像處理(5):圖像的繪制

實際上前面我們就已經用到了圖像的繪制,如:io.imshow(img)這一行代碼的實質是利用matplotlib包對圖片進行繪制,繪制成功后,返回一個matplotlib類型的數據。因此,我們也可以這樣寫:importmatplotlib.pyplot …

axios代理跨域 cli4_vuecli 3.0之跨域請求代理配置及axios路徑配置 莫小龍

vue-cli 3.0之跨域請求代理配置及axios路徑配置問題:在前后端分離的跨域請求中,報跨域問題配置:vue.config.js:module.exports {runtimeCompiler: true,publicPath: /, // 設置打包文件相對路徑devServer: {// open: process.pla…

string轉為char數組_StringBuilder的區別是什么?String是不可變?一點課堂(多岸學院)...

String和StringBuffer、StringBuilder的區別可變性簡單的來說:String 類中使用 final 關鍵字字符數組保存字符串,private final char value[],所以 String 對象是不可變的。而StringBuilder 與 StringBuffer 都繼承自 AbstractStringBuild…

python去年軟件排行_2017年編程語言排行榜,Python位居榜首(C語言需求最大)

最近IEEE Spectrum 發布了編程語言交互式排行榜,為很多學習代碼的朋友們詳解各類代碼語言的需求和占有率。為學習代碼的朋友們能更加重視哪一種編程語言而有一個明確的方向。下面排行榜123網為你公布2017年編程語言排行榜,Python位居榜首(C語言需求最大)。2017年編程…

mysql test數據庫_mysql數據庫test

Re介紹一下CentOS下MySQL數據庫的安裝與配置方法MySQL數據庫配置的具體步驟:1、編輯MySQL的配置文件,使用vi /etc/my.cnf[rootsample ~]# vi /etc/my.cnf  ← 編輯MySQL的配置文件[mysqld]datadir/var/lib/mysqlsocket/var/lib/mysql/mysql.sock# Defau…

mysql 升級 openssl_【1分鐘教程】LNMP架構應用實戰 Openssl升級操作

由于實際生產環境需求,需要將LNMP環境中的openssl版本升級至目前最新版本openssl-1.1.0c,這玩意升級還真的不是一般的麻煩,由于它與系統各種服務都有相關的聯系,比如ssh服務等,因此,升級非常的繁瑣,所以今天…