目錄
- 一、Linux內(nèi)存機(jī)制簡單介紹
- 二、如何釋放交換內(nèi)存
一、Linux內(nèi)存機(jī)制簡單介紹
直接從物理內(nèi)存讀寫數(shù)據(jù)要比從硬盤讀寫數(shù)據(jù)要快的多(硬盤磁道尋址),因此,我們希望所有數(shù)據(jù)的讀寫都在內(nèi)存完成,但是內(nèi)存大小是有限的,并且內(nèi)存價格高于硬盤價格,于是就有了物理內(nèi)存與虛擬內(nèi)存的概念。
物理內(nèi)存:系統(tǒng)硬件提供的內(nèi)存大小,是真正的內(nèi)存,可用 free -h 查看內(nèi)存的使用情況。
交換內(nèi)存Swap:交換內(nèi)存swap是linux下一個虛擬內(nèi)存的概念,它是利用磁盤空間虛擬出的一塊邏輯內(nèi)存,用于解決物理內(nèi)存容量不足的問題。可查看swapon -s查看交換內(nèi)存的掛載盤。
二、如何釋放交換內(nèi)存
1. 設(shè)置swappiness值為0,表示盡可能不使用交換內(nèi)存
(1)臨時設(shè)置方案,重啟后不生效
# 設(shè)置vm.swappiness為0 sysctl vm.swappiness=0 # 查看swappiness值 cat /proc/sys/vm/swappiness
(2)永久設(shè)置方案,重啟后仍然生效
vi /etc/sysctl.conf # 添加 vm.swappiness=0
者直接寫入
echo 'vm.swappniess=0'>>/etc/sysctl.conf
2.釋放交換分區(qū)
關(guān)閉交換分區(qū)的前提:
首先要保證內(nèi)存剩余量要大于等于swap使用量,否則會宕機(jī)!因?yàn)楦鶕?jù)內(nèi)存機(jī)制,swap分區(qū)一旦釋放,所有存放在swap分區(qū)的文件都會轉(zhuǎn)存到物理內(nèi)存上。然后再通過重新掛載swap分區(qū)完成釋放swap。
(1)查看內(nèi)存剩余情況
free -h
(2)查看交換分區(qū)的掛載盤
swapon -s
(3)關(guān)閉掛載分區(qū)(徹底關(guān)閉swap)
swapoff /dev/dm-1
注意:前提是swap使用小于空閑內(nèi)存,足夠?qū)wap內(nèi)存轉(zhuǎn)存到物理內(nèi)存中,否則會宕機(jī)
(4)再次查看交換分區(qū)的掛載情況
swapon -s
(5)重新開啟swap掛載
如果不想徹底關(guān)閉分區(qū),用命令swapon /dev/dm-1(需要換成自己的掛載分區(qū)) 打開即可
swapon /dev/dm-1
3.定時釋放交換分區(qū)
如果系統(tǒng)內(nèi)存確實(shí)不足,不想禁用交換分區(qū)時,可以在2的基礎(chǔ)上改進(jìn),設(shè)置定時釋放交換分區(qū)
(1)查看交換分區(qū)的掛載情況
# 查看交換分區(qū)掛載的位置,假設(shè)此處查看的結(jié)果為 /dev/dm-1 swapon -s
(2)編寫釋放交換分區(qū)的腳本(其實(shí)就是將2的步驟組合起來)
#!/bin/bash #關(guān)閉所有交換空間,Linux會自動將swap內(nèi)容轉(zhuǎn)到內(nèi)存中 swapoff /dev/dm-1 #開啟交換空間 swapon /dev/dm-1 #輸出 echo "釋放完畢"
(3)設(shè)置定時任務(wù)(假設(shè)定時文件存放在/home/freeswap.sh)
編寫 /etc/crontab,并添加定時執(zhí)行腳本的任務(wù)
vi /etc/crontab
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed # 每天凌晨1點(diǎn)釋放交換空間 0 1 * * * root /home/freeswap.sh