java進程莫名被系統殺掉

場景:用springboot 開發的一個java程序部署到服務器上面,運行一段時間之後, 發現進程突然消失,沒有錯誤日誌打印,也沒有內存溢出。查看服務器的狀態還有部分內存。

 

原因:一直以爲是程序問題導致的內存不夠,程序掛掉了,各種查找之後發現並沒有內存泄漏的問題,後來通過網上搜索可能是linux自動把進程殺掉了,查看被系統殺掉進程日誌的命令:  egrep -i -r 'killed process' /var/log (只有root權限纔可以查看),發現確實有被殺掉的進程,而且時間也對的上,到這知道原來是linux殺掉的進程。後來通過和我們運維瞭解,linux 會檢測內存的變化,如果發現內存使用過大的進程,會被殺掉,保護系統正常運行。

 

解決:我和我們運維的同學反饋之後,他們說可以通過加大虛擬內存解決問題(當linux的內存不夠的時候,會使用虛擬內存swap),我們當時服務器的swap內存爲512m ,後面加到了2G,後面進程被殺掉的情況發生的就很少了(我們服務器實際內存本身就是太小,很容易就溢出)

 

free -lm 命令查看實際內存大小(實際和虛擬)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章