SWAP分区介绍和扩展

在Linux服务器运行程序时,在代码无误且前序任务运行正常的情况下,突然出现任务终止。首先查看了下负载,业务进程和相关日志,都没有错误日志记录。查看了下内存占用情况(free -m)发现,Swap free为0,意味是是由于内存不足引起的程序终止。本篇博文将介绍一下SWAP是什么,以及如何扩展。

1.SWAP概述

其实,早期内存一般都比较小,很容易就出现内存不足的问题,所以很早就提出了一个交换分区(swap partition)的概念。

swap 分区是将磁盘当作内存使用,使得虚拟地址空间的范围大小可以超出物理内存的实际大小,在物理内存空间不足时,可以将物理内存中的一些不重要数据拷贝到磁盘的 swap 分区中,从而让出内存空间,并且在需要那些已被拷出数据时再从 swap 分区中拷回到内存。也就是说物理内存和缓存区内存不够用的时候,才会用到SWAP。

只有在出现物理内存耗尽或即将耗尽的时候,如果进程继续请求分配内存,将报错 out-of-memory(OOM)表示内存不足,并且在出现 OOM 的时候,操作系统将触发 OOM Killer 程序从进程列表中筛选出一个内存密集型进程杀掉,从而释放大片内存。

2.SWAP分区设置多大合适

一般来说可以按照如下规则设置swap大小(以实际情况为准,这只是建议)

4G以内的物理内存,SWAP 设置为内存的2倍。

4-8G的物理内存,SWAP 等于内存大小。

8-64G 的物理内存,SWAP 设置为8G。

64-256G物理内存,SWAP 设置为16G。

3.物理内存使用多少为不够用?

实际上并不是等所有的物理内存都消耗完毕之后,才去使用swap的空间,而是由swappiness 参数值 来控制物理内存够不够用。

cat /proc/sys/vm/swappiness

本人使用服务器默认是60

swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,

swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

4.扩展SWAP

查看占用SWAP排名前10的进程pid

for i in $(cd /proc;ls | grep "^[0-9]"|awk '$0 >100');do awk '/Swap:/{a=a+$2}END{print "'$i'", a/1024"M"}' /proc/$i/smaps 2>/dev/null;done | sort -k2nr | head -10

4.1查看系统块设备信息

lsblk

SWAP分区介绍和扩展_第1张图片

4.2查看swap分区大小

free -h

可以看到当前服务器Swap分区大小为2G,已使用1.2G,余量730M

4.3增加1G的Swap分区

dd if=/dev/zero of=/swap2 bs=1M count=10240

非root用户需要sudo开启临时root权限

这里会新建一个目录(/swap2),该目录为新增的swap分区

各参数含义:

dd:用指定大小的块拷贝文件,并在拷贝的同时进行指定的转换

if=:(input file) 数据的来源 (源)

of=:(outpu file)输出文件 (目标)

bs=:(block size) 每次复制多大(bytes)

count=:次数

/dev/zero 白洞 源源不断的输出

/dev/null 黑洞 吸收

/dev/urandom 随机字符

4.4 将文件更新为swap类型

查看新增分区的文件类型

file /swap2

使用mkswap命令来设置交换文件,即相当于格式化新建立的交换分区。

mkswap /swap2

4.5激活swap分区

要立即启用交换文件而不是在引导时自动启用,使用swapon命令。

swapon /swap2

如果要停止使用新建立的交换分区则用swapoff命令。

检查增加后的交换情况,增加后的交换分区为12238M。

free -m

4.6更改新增的swap分区的权限

chmod 600 /swap2

4.7查看swap分区的组成情况

swapon -s

参考链接

一条报警引起的对 swap 认识

linux下扩展swap分区方法

http://t.csdn.cn/uEiGO

你可能感兴趣的:(java,spring,开发语言)