測試環境的服務部署在阿里雲服務器上,運行一段時間總是自動宕掉,在配置文件里加上內存溢出配置,也不能打印出相關日志,一直找不出原因。今天在網上:http://www.cnblogs.com/chenerzhu/p/9697179.html
搜索才知道原來是內存不夠用了,是系統自動殺死了java進程。
執行 free -h 查看內存執行情況:
我的剩余內存就剩了200多兆,而我在這台機器上部署了10幾個服務。內存根本不夠用,而且,阿里雲默認的Swap分區是0,所以系統在內存不夠的情況下就殺死了我的服務。這個可以從
/var/log 下的messages日志可以看出。
所以創建Swap分區的方式來解決這種問題。
創建方式:
1.進入root權限 sudo -i
2. 創建swap 分區
dd if=/dev/zero of=/swap_file bs=1M count=8192
注:此文件的大小是count的大小乘以bs大小,上面命令的大小是8GB;這個過程可能需要等一會兒。
3 通過mkswap命令將上面新建出的文件做成swap分區
mkswap /swap_file
4 啟用交換分區
swapon /swap_file
5 設置開機自動掛載
vim /etc/fstab
在里面加入以下內容並保存。
/swap_file swap swap defaults 0 0
6 查看內核參數vm.swappiness中的數值是否為0,如果為0則根據實際需要調整成30或者60
cat /proc/sys/vm/swappiness
我的是0,我改成了60,通過 sysctl -w vm.swappiness=60 命令。
這里需要簡單說明下,在Linux系統中,可以通過查看/proc/sys/vm/swappiness內容的值來確定系統對SWAP分區的使用原則。當swappiness內容的值為0時,表示最大限度地使用物理內存,物理內存使用完畢后,才會使用SWAP分區。當swappiness內容的值為100時,表示積極地使用SWAP分區,並且把內存中的數據及時地置換到SWAP分區。注:若想永久修改,則編輯/etc/sysctl.conf文件
我們這里設置的50,就表示當物理內存少於50%時便使用交換分區。
7.關閉swap分區
swapoff /swap_file
8. 關於多個交換分區在使用上的優先級
如果你有多於一個交換文件或交換分區,你可以給它們各自分配一個優先級值(0 到 32767)。系統會在使用較低優先級的交換區域前優先使用較高優先級的交換區域。例如,如果你有一個較快的磁盤 (/dev/sda) 和一個較慢的磁盤 (/dev/sdb),給較快的設備分配一個更高的優先級。優先級可以在 fstab 中通過 pri 參數指定:
/dev/sda1 none swap defaults,pri=100 0 0 /dev/sdb2 none swap defaults,pri=10 0 0
或者通過 swapon 的 ?p (或者 ??priority) 參數:
swapon -p 100 /dev/sda1
如果兩個或更多的區域有同樣的優先級,並且它們都是可用的最高優先級,頁面會按照循環的方式在它們之間分配。
說明:關於swap分區的創建轉載自:https://www.liangzl.com/get-article-detail-3123.html 如有侵權,即可刪除。