OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory failed error='Cannot allocate memory'

1.問題描述
廢話不多說,直接上圖:


圖1 錯誤截圖

在啟動項目的時候報錯,無法分配內(nèi)存。

2.問題分析

  • 查看服務器的剩余內(nèi)存


    圖2 查看內(nèi)存使用情況

如上圖所示:系統(tǒng)一共6.8G 使用了5.9G 剩余215M,那么我們在啟動項目的時候設(shè)置了JVM的最小內(nèi)存參數(shù):


圖3 查看項目啟動需要的最小內(nèi)存

那么顯而易見,內(nèi)存不夠用,導致項目無法啟動。

  • 啟動用swap交換空間
    從圖2可以看出我們的服務器是沒有啟用swap交換空間的(打了馬賽克是我開啟swap之后的結(jié)果),就是說犧牲一部分磁盤存儲來保證部分程序正常運行所需要的運行內(nèi)存。
    第一步:創(chuàng)建swapfile
# 使用root權(quán)限,創(chuàng)建500M
dd if=/dev/zero of=swapfile bs=1024 count=500000

第二步:將swapfile設(shè)置為swap空間

mkswap swapfile

第三步:啟用交換空間

swapon swapfile 

至此我們可以查看運行內(nèi)存的使用情況:


圖4 查看內(nèi)存使用
  1. 問題解決
  • 此時啟動項目,發(fā)現(xiàn)啟動成功,同時繼續(xù)查看內(nèi)存使用


    圖5 查看內(nèi)存使用

發(fā)現(xiàn)swap已經(jīng)使用了486M,講道理啟動我的項目需要256M~512M之間,swap空間我只開了500M雖然啟動成功了,但是如果后續(xù)還有相同的服務上線的話肯定不夠用,那么我們該如何去創(chuàng)建合適的swap呢?
可以參考:給Linux分配多少Swap空間才夠呢?

  • 這里再說下在什么時候swap交換內(nèi)存會被使用呢?
#內(nèi)核空間交換區(qū)分利用參數(shù)查看命令
cat /proc/sys/vm/swappiness
圖6 swap使用閥值
  • 內(nèi)核空間交換分區(qū)利用參數(shù)說明

swappiness=0 的時候表示最大限度使用物理內(nèi)存,然后才是swap空間;swappiness=100 的時候表示積極的使用swap分區(qū),并且把內(nèi)存上的數(shù)據(jù)及時的搬運到swap空間里面,那么我們的是30,也就是說當內(nèi)存使用到30%的時候,swap內(nèi)存啟用。

參考地址:https://blog.csdn.net/weixin_44105991/article/details/91320644

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

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

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