Linux中swap管理分区
程序员文章站
2022-06-03 07:50:55
...
1、swap是什么?
swap space是磁盘上的一块区域,可以是一个分区,也可以是一个文件,或者是他们的组合。简单点说,当系统物理内存吃紧时,Linux会将内存中不常访问的数据保存到swap上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问swap上存储的内容时,再将swap上的数据加载到内存中,这就是我们常说的swap out和swap in。
2、为什么需要swap?
要回答这个问题,就需要回答swap给我们带来了哪些好处。
- 对于一些大型的应用程序(如LibreOffice、video editor等),在启动的过程中会使用大量的内存,但这些内存很多时候只是在启动的时候用一下,后面的运行过程中很少再用到这些内存。有了swap后,系统就可以将这部分不这么使用的内存数据保存到swap上去,从而释放出更多的物理内存供系统使用。
- 很多发行版(如ubuntu)的休眠功能依赖于swap分区,当系统休眠的时候,会将内存中的数据保存到swap分区上,等下次系统启动的时候,再将数据加载到内存中,这样可以加快系统的启动速度,所以如果要使用休眠的功能,必须要配置swap分区,并且大小一定要大于等于物理内存
- 在某些情况下,物理内存有限,但又想运行耗内存的程序怎么办?这时可以通过配置足够的swap空间来达到目标,虽然慢一点,但至少可以运行。
- 虽然大部分情况下,物理内存都是够用的,但是总有一些意想不到的状况,比如某个进程需要的内存超过了预期,或者有进程存在内存泄漏等,当内存不够的时候,就会触发内核的OOM killer,根据OOM killer的配置,某些进程会被kill掉或者系统直接重启(默认情况是优先kill耗内存最多的那个进程),不过有了swap后,可以拿swap当内存用,虽然速度慢了点,但至少给了我们一个去debug、kill进程或者保存当前工作进度的机会。
- 如果看过Linux内存管理,就会知道系统会尽可能多的将空闲内存用于cache,以加快系统的I/O速度,所以如果能将不怎么常用的内存数据移动到swap上,就会有更多的物理内存用于cache,从而提高系统整体性能。
3、基础命令:
mkswap /devices : 格式化成swap格式
swapon /devices : **swap ,加入到swap分区中
开机自动启动新添加的swap分区: /etc/fstab /devices swap swap defaults 0 0
实验
1、建立分区
[[email protected] localhost ~]# gdisk /dev/sdb
Command (? for help): n # 新建分区
Partition number (2-128, default 2): # 回车
First sector (34-41943006, default = 2099200) or {+-}size{KMGTP}: # 回车
Last sector (2099200-41943006, default = 41943006) or {+-}size{KMGTP}: +1G # 给1G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): # 回车
Changed type of partition to 'Linux filesystem'
Command (? for help): w # 保存
Do you want to proceed? (Y/N): y
2、查看是否分区成功
[[email protected] localhost ~]# ll /dev/sdb*
brw-rw----. 1 root disk 8, 16 2月 26 15:36 /dev/sdb
brw-rw----. 1 root disk 8, 17 2月 26 15:36 /dev/sdb1
brw-rw----. 1 root disk 8, 18 2月 26 15:37 /dev/sdb2
3、格式化
[[email protected] localhost ~]# mkswap /dev/sdb2
正在设置交换空间版本 1,大小 = 1048572 KiB
无标签,UUID=bf1788b2-c1f5-4f89-bb62-cd91617ee8dc
# 对比( **swap空间之前的对比)
[[email protected] localhost ~]# free -m
total used free shared buff/cache available
Mem: 3770 454 2938 14 378 3082
Swap: 2047 0 2047
[[email protected] localhost ~]# swapon /dev/sdb2
[[email protected] localhost ~]# free -m
total used free shared buff/cache available
Mem: 3770 452 2940 14 377 3084
Swap: 3071 0 3071
使用 文件增加swap空间?
阿里云默认的没有swap空间,如何增加swap?
1) 使用dd命令创建个500M大小的文件
[[email protected] localhost ~]# dd if=/dev/zero of=swap_file bs=1M count=500
记录了500+0 的读入
记录了500+0 的写出
524288000字节(524 MB)已复制,12.2954 秒,42.6 MB/秒
[[email protected] localhost ~]# ll -h swap_file
-rw-r--r--. 1 root root 500M 2月 26 15:46 swap_file
[[email protected] localhost ~]# chmod 0600 swap_file
2) 把500M的文件格式化成swap
[[email protected] localhost ~]# mkswap -f swap_file
正在设置交换空间版本 1,大小 = 511996 KiB
无标签,UUID=def65bf9-7143-4734-9801-d3d8bb583061
[[email protected] localhost ~]# free -m
total used free shared buff/cache available
Mem: 3770 455 2423 14 891 3075
Swap: 3071 0 3071
3) **swap空间
[[email protected] localhost ~]# swapon /root/swap_file
4) 查看是否被**
[[email protected] localhost ~]# free -m
total used free shared buff/cache available
Mem: 3770 456 2423 14 891 3074
Swap: 3571 0 3571
上一篇: 设置linux的swap分区
下一篇: JavaNIO处理长连接