【系统运维】系统内存与SWAP交换分区介绍与配置教程

tanglu 735 2021-12-04

通常所说的内存容量指的是物理内存。物理内存也称为主存,只有内核才可以直接访问物理内存。当进程要访问内存时,Linux内核会给每个进程提供一个独立且连续的虚拟地址,也就是虚拟内存。虚拟内存又被分为内核空间和用户空间两部分


一、SWAP的作用

当系统出现内存紧张时会通过一系列机制回收内存:

· 回收缓存,比如使用 LRU(Least Recently Used)算法,回收最近使用最少的内存页

· 回收不常访问的内存,把不常用的内存通过交换分区直接写到磁盘中(SWAP)

· OOM(Out of Memory),直接杀掉占用大量内存的进程

SWAP分区可以是一块磁盘分区,也可以是通过一个文件形成,它用于存放操作系统内存中所置换出来的数据。操作系统通过kswapd进程周期性对内存进行检查,当服务器物理内存不足的时候,根据特定算法把一部分内存当中的数据(不是所有内存数据都可以交换)交换到SWAP分区进行存放,这种交换行为也可以称为发生了SWAP。

对于类似数据库这种核心服务,SWAP的好处是当内存不足的时候可以将一部分内存数据交换出去,避免OOM,不过随之带来的坏处就是会产生较高IO,降低系统性能。


二、创建SWAP方法

如果本机已有2G SWAP分区,又新建新的分区并启动后,SWAP空间将会累加

· 通过系统文件创建SWAP

#创建一个2G的文件
dd if=/dev/zero of=/data/swapfile bs=1024M count=2

#格式化成swap分区
mkswap /data/swapfile

#开启swap分区
swapon /data/swapfile

#在/etc/fstab中增加一条记录如下
/data/swapfile    swap   swap   defaults 0 0


· 通过系统分区创建SWAP

#创建swap分区
fdisk /dev/sdb
# 新建一个分区
n
p
default
default
...
# 修改分区 id 为swap
t
82
# 写入分区表
w

# 同步内存和分区表信息
partprobe

# 格式化swap 分区
mkswap /dev/sdb1

# 打开 swap 分区
swapon /dev/sdb1

#在/etc/fstab中增加一条记录如下
/opt/swapfile    swap   swap defaults 0 0


三、SWAP的查看

#查看进程占用内存情况,单位是M
cd /proc
for i in `ls | grep "^[0-9]" | awk ' $0 >100'`
do 
  awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps 
done 2>&1 | sort -k2nr | head


3131 102.676M
3127 94.4414M
3136 69.9648M
3129 61.1445M
3097 50.7695M
3086 47.0078M
3119 46.4102M
3106 42.4648M
3094 37.5547M
3092 36.8398M

# 注:以上结果输出PID与内存占用大小,通过PID可以找到对应进程


四、如何禁用SWAP

对于ES、Redis这种追求极致性能的服务,基本是不允许发生SWAP的,所以可以考虑禁用SWAP

swapoff -a  #如果永久禁用记得修改/etc/fstab


五、调整swappiness

如果不打算完全禁用SWAP,可以通过降低swappiness的值进行优化。swappiness决定了操作系统交换内存的频率,系统默认值为60(内存使用到100-60=40%开始使用交换分区)。当swappiness=0表示最大限度使用物理内存,然后才是SWAP空间,但是由于未知原因,当设置为0的时候会有概率触发OOM,而设置为1则不会。当swappiness=100表示积极使用SWAP,并且主动把内存数据交换到SWAP中。所以可以考虑将值调低以防止正常情况下发生交换,但仍允许紧急情况进行SWAP。

#临时配置
sysctl vm.swappiness=1
#查看是否生效
cat /proc/sys/vm/swappiness
1

#永久生效
vim /etc/sysctl.conf
vm.swappiness=1

#刷新配置生效
sysctl -p


版权声明
本站所有文章均为原创,转载请注明出处!小站维护不易,如果对您有所帮助,希望能点击一下站内广告,谢谢!
上一篇:【Redis运维】Redis开发与运维规范
下一篇:大数据基础(1)Hadoop背景与核心组件介绍
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

微信二维码