java服務(wù)自動停止原因查找方式
現(xiàn)象
最近發(fā)現(xiàn)服務(wù)java啟動了幾天就自己停了,然后查看了,是內(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)自動kill了java的進(jìn)程
2.查看內(nèi)存使用功能情況,確實所剩不多了
free -h

以下是解決方案
之前買了個云服務(wù)器玩,不過是最低配置的1核1G,后來發(fā)現(xiàn)這個內(nèi)存太小了,隨便裝幾個軟件就不行了,內(nèi)存消耗較大的像 redis 運(yùn)行起來很多問題。
這些時間了解了下 docker 容器,去嘗試了下發(fā)現(xiàn) mysql 就掛了,而且怎么樣也啟動不了了,后來發(fā)現(xiàn)是內(nèi)存實在是不夠了
后來網(wǎng)上了解,如果服務(wù)器的總是報告內(nèi)存不足,并且時常因為內(nèi)存不足而引發(fā)服務(wù)被強(qiáng)制kill的話,在不增加物理內(nèi)存的情況下,啟用swap交換區(qū)作為虛擬內(nèi)存是一個不錯的選擇。當(dāng)然這個選擇是在你對訪問速度和緩存那些沒什么要求的情況下,比如你自己測試玩的
虛擬內(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)建的,這時候這個文件還不能直接使用為swap文件
修改文件權(quán)限,如不修改,在啟用swap文件的時候會提示下面信息(不影響使用,建議修改)
# chmod 0600 /root/swapfile2

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

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

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

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

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

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決Maven?build打包,類找不到,找不到引用的那個項目里面的類問題
文章討論了在使用Maven構(gòu)建項目時遇到類找不到的問題,并給出了解決方法,主要原因是公共項目被打成了可執(zhí)行的jar,導(dǎo)致其他項目無法引用其中的類,解決方法包括在公共項目的pom中將打包類型改為普通jar,以及在主項目中正確引用公共項目2026-02-02
SpringBoot選擇自有bean優(yōu)先加載實現(xiàn)方法
在一些需求中,可能存在某些場景,比如先加載自己的bean,然后自己的bean做一些DB操作,初始化配置問題,然后后面的bean基于這個配置文件,繼續(xù)做其他的業(yè)務(wù)邏輯。因此有了本文的這個題目2023-03-03

