java服務(wù)自動(dòng)停止原因查找方式
現(xiàn)象
最近發(fā)現(xiàn)服務(wù)java啟動(dòng)了幾天就自己停了,然后查看了,是內(nèi)存不足造成的。
1.查看是否是由于內(nèi)存不足造成的
命令:
cd /var/log cat messages* |grep java

發(fā)現(xiàn)有:Out of memory: Kill process 58235 (java) score 231 or sacrifice child
由于內(nèi)存不足,系統(tǒng)自動(dòng)kill了java的進(jìn)程
2.查看內(nèi)存使用功能情況,確實(shí)所剩不多了
free -h

以下是解決方案
之前買了個(gè)云服務(wù)器玩,不過是最低配置的1核1G,后來發(fā)現(xiàn)這個(gè)內(nèi)存太小了,隨便裝幾個(gè)軟件就不行了,內(nèi)存消耗較大的像 redis 運(yùn)行起來很多問題。
這些時(shí)間了解了下 docker 容器,去嘗試了下發(fā)現(xiàn) mysql 就掛了,而且怎么樣也啟動(dòng)不了了,后來發(fā)現(xiàn)是內(nèi)存實(shí)在是不夠了
后來網(wǎng)上了解,如果服務(wù)器的總是報(bào)告內(nèi)存不足,并且時(shí)常因?yàn)閮?nèi)存不足而引發(fā)服務(wù)被強(qiáng)制kill的話,在不增加物理內(nèi)存的情況下,啟用swap交換區(qū)作為虛擬內(nèi)存是一個(gè)不錯(cuò)的選擇。當(dāng)然這個(gè)選擇是在你對(duì)訪問速度和緩存那些沒什么要求的情況下,比如你自己測試玩的
虛擬內(nèi)存一般設(shè)置為物理內(nèi)存的2倍即可
新增swap分區(qū)
這里使用文件作為swap分區(qū) ,下面操作需要在root用戶下操作
使用 free -h 查看當(dāng)前內(nèi)存占用情況,可以看到物理內(nèi)存所剩無幾,下面的swap也是使用的文件作為虛擬內(nèi)存使用的

創(chuàng)建要作為swap分區(qū)的文件:增加1GB大小的交換分區(qū),則命令寫法如下,其中的count等于想要的塊的數(shù)量(bs*count=文件大小),如下面是2G
# dd if=/dev/zero of=/root/swapfile2 bs=1M count=2048

這里我使用的of為/root/swapfile2 ,可以看到該文件是新創(chuàng)建的,這時(shí)候這個(gè)文件還不能直接使用為swap文件
修改文件權(quán)限,如不修改,在啟用swap文件的時(shí)候會(huì)提示下面信息(不影響使用,建議修改)
# chmod 0600 /root/swapfile2

格式化為交換分區(qū)文件,建立swap的文件系統(tǒng),/root/swapfile2需要與上面的of的值一致,這個(gè)目錄可以自定義
# mkswap /root/swapfile2

啟用swap文件:
# swapon /root/swapfile2

可以看到未啟用時(shí)虛擬內(nèi)存為2G,啟用后內(nèi)存增加了2G
使系統(tǒng)開機(jī)時(shí)自啟用
# vim /etc/fstab

在文件/etc/fstab中添加一行
/root/swapfile2 swap swap defaults 0 0
調(diào)整swap空間使用的優(yōu)先級(jí)
如果內(nèi)存夠大,應(yīng)當(dāng)告訴 linux 不必太多的使用 SWAP 分區(qū), 可以通過修改 swappiness 的數(shù)值。
swappiness=0 的時(shí)候表示最大限度使用物理內(nèi)存,然后才是 swap空間,swappiness=100的時(shí)候表示積極的使用swap分區(qū),并且把內(nèi)存上的數(shù)據(jù)及時(shí)的搬運(yùn)到swap空間里面。
各個(gè)操作系統(tǒng)的優(yōu)先級(jí)可能都不一樣,如果不調(diào)整,你會(huì)發(fā)現(xiàn)添加的虛擬內(nèi)存幾乎沒有用到
查看當(dāng)前swappiness值
# cat /proc/sys/vm/swappiness
修改swappiness值為60(臨時(shí)修改,重啟后即還原為默認(rèn)值)
# sudo sysctl vm.swappiness=60

永久修改swappiness默認(rèn)值(重啟生效)
# vim /etc/sysctl.conf
找到vm.swappiness ,如果沒有則需要手動(dòng)添加一行 vm.swappiness = 60 保存即可

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java?http請(qǐng)求獲取圖片并返回文件流給前端的方法步驟
作為一名Java后端開發(fā)者,掌握如何從后端返回文件流至前端是基本技能之一,這篇文章主要介紹了java?http請(qǐng)求獲取圖片并返回文件流給前端的方法步驟,需要的朋友可以參考下2024-09-09
解決Maven?build打包,類找不到,找不到引用的那個(gè)項(xiàng)目里面的類問題
文章討論了在使用Maven構(gòu)建項(xiàng)目時(shí)遇到類找不到的問題,并給出了解決方法,主要原因是公共項(xiàng)目被打成了可執(zhí)行的jar,導(dǎo)致其他項(xiàng)目無法引用其中的類,解決方法包括在公共項(xiàng)目的pom中將打包類型改為普通jar,以及在主項(xiàng)目中正確引用公共項(xiàng)目2026-02-02
SpringBoot選擇自有bean優(yōu)先加載實(shí)現(xiàn)方法
在一些需求中,可能存在某些場景,比如先加載自己的bean,然后自己的bean做一些DB操作,初始化配置問題,然后后面的bean基于這個(gè)配置文件,繼續(xù)做其他的業(yè)務(wù)邏輯。因此有了本文的這個(gè)題目2023-03-03
java去除中文括號(hào)小括號(hào),或者英文括號(hào)的實(shí)例代碼
這篇文章主要介紹了java去除中文括號(hào)小括號(hào),或者英文括號(hào)的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09
Java獲取當(dāng)前時(shí)間方法總結(jié)
本篇文章給大家整理了關(guān)于Java獲取當(dāng)前時(shí)間方法,以及相關(guān)代碼分享,有需要的朋友測試參考下吧。2018-02-02

