目錄
- 一、Linux內存機制簡單介紹
- 二、如何釋放交換內存
一、Linux內存機制簡單介紹
直接從物理內存讀寫數據要比從硬盤讀寫數據要快的多(硬盤磁道尋址),因此,我們希望所有數據的讀寫都在內存完成,但是內存大小是有限的,并且內存價格高于硬盤價格,于是就有了物理內存與虛擬內存的概念。
物理內存:系統硬件提供的內存大小,是真正的內存,可用 free -h 查看內存的使用情況。
交換內存Swap:交換內存swap是linux下一個虛擬內存的概念,它是利用磁盤空間虛擬出的一塊邏輯內存,用于解決物理內存容量不足的問題。可查看swapon -s查看交換內存的掛載盤。
二、如何釋放交換內存
1. 設置swappiness值為0,表示盡可能不使用交換內存
(1)臨時設置方案,重啟后不生效
# 設置vm.swappiness為0 sysctl vm.swappiness=0 # 查看swappiness值 cat /proc/sys/vm/swappiness
(2)永久設置方案,重啟后仍然生效
vi /etc/sysctl.conf # 添加 vm.swappiness=0
者直接寫入
echo 'vm.swappniess=0'>>/etc/sysctl.conf
2.釋放交換分區
關閉交換分區的前提:
首先要保證內存剩余量要大于等于swap使用量,否則會宕機!因為根據內存機制,swap分區一旦釋放,所有存放在swap分區的文件都會轉存到物理內存上。然后再通過重新掛載swap分區完成釋放swap。
(1)查看內存剩余情況
free -h
(2)查看交換分區的掛載盤
swapon -s
(3)關閉掛載分區(徹底關閉swap)
swapoff /dev/dm-1
注意:前提是swap使用小于空閑內存,足夠將swap內存轉存到物理內存中,否則會宕機
(4)再次查看交換分區的掛載情況
swapon -s
(5)重新開啟swap掛載
如果不想徹底關閉分區,用命令swapon /dev/dm-1(需要換成自己的掛載分區) 打開即可
swapon /dev/dm-1
3.定時釋放交換分區
如果系統內存確實不足,不想禁用交換分區時,可以在2的基礎上改進,設置定時釋放交換分區
(1)查看交換分區的掛載情況
# 查看交換分區掛載的位置,假設此處查看的結果為 /dev/dm-1 swapon -s
(2)編寫釋放交換分區的腳本(其實就是將2的步驟組合起來)
#!/bin/bash #關閉所有交換空間,Linux會自動將swap內容轉到內存中 swapoff /dev/dm-1 #開啟交換空間 swapon /dev/dm-1 #輸出 echo "釋放完畢"
(3)設置定時任務(假設定時文件存放在/home/freeswap.sh)
編寫 /etc/crontab,并添加定時執行腳本的任務
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點釋放交換空間 0 1 * * * root /home/freeswap.sh