如何进行SWAP知识的理论分析

62次阅读
没有评论

共计 4445 个字符,预计需要花费 12 分钟才能阅读完成。

如何进行 SWAP 知识的理论分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Linux 中的交换空间在物理内存量 (RAM) 已满时使用。

如果系统需要更多内存资源,并且 RAM 已满,则内存中的非活动页面将移动到交换空间。

虽然交换空间可以帮助具有少量 RAM 的计算机,但不应将其视为更多 RAM 的替代品。

交换空间位于硬盘上,硬盘的访问时间比物理内存慢。交换空间可以是专用交换分区(推荐)、交换文件或交换分区和交换文件的组合。

Linux 内核为了提高读写效率与速度,会将文件在内存中进行缓存,这部分内存就是 Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory 也不会自动释放。这就会导致你在 Linux 系统中程序频繁读写文件后,你会发现可用物理内存变少。当用户提交程序,然后产生进程,在机器上运行,机器会判断当前物理内存是否还有空闲允许进程调入内存运行,如果有那么则直接调入内存进行运行;如果没有,那么会根据优先级选择一个进程挂起,把该进程交换到 swap 中等待,该程序占用的物理内存中的一部分空间就被释放出来了,然后把新的进程调入到内存中运行。等到那个挂起程序要运行时,再从 Swap 分区中恢复保存的数据到内存中。
但是并不是所有从物理内存中交换出来的数据都会被放到 Swap 中(如果这样的话,Swap 就会不堪重负),有相当一部分数据被直接交换到文件系统。例如,有的程序会打开一些文件,对文件进行读写(其实每个程序都至少要打开一个文件,那就是运行程序本身),当需要将这些程序的内存空间交换出去时,就没有必要将文件部分的数据放到 Swap 空间中了,而可以直接将其放到文件里去。如果是读文件操作,那么内存数据被直接释放,不需要交换出来,因为下次需要时,可直接从文件系统恢复;如果是写文件,只需要将变化的数据保存到文件中,以便恢复。当物理内存和 swap 都被使用完那么就会报错 out of memory。

Swap 被使用的日常例子
在使用 Windows 系统时,可以同时运行多个程序,当你切换到一个很长时间没有理会的程序时,会听到硬盘“哗哗”直响。这是因为这个程序的内存被那些频繁运行的程序给“偷走”了,放到了 Swap 区中。因此,一旦此程序被放置到前端,它就会从 Swap 区取回自己的数据,将其放进内存,然后接着运行。

Swap 空间的作用
当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的程序被临时保存到 Swap 空间中,等到那些程序要运行时,再从 Swap 中恢复保存的数据到内存中。从这也可以看出 swap 扮演了一个非常重要的角色,就是暂存被换出的进程。根据这种换入和换出,实现了内存的循环利用,让用户感觉不到内存的限制。

Swap 分区对性能的影响
正方:Swap 不能代替物理内存用!因为 swap 毕竟还是以磁盘来伪装成内存,交换的操作是磁盘 IO 的操作而不是内存的 load 与 store 操作。
反方:正常的情况即物理内存还够的情况下,很少使用 swap 内存区,物理内存不够的情况下,swap 空间上存储的也是系统不会频繁使用的数据,调用的次数非常少,性能问题几乎可以忽略,物理内存极度不够的话,性能问题与 Swap 分区有啥关系,这时你加多数 Swap 分区也无济于事,只能加物理内存。

使用多大比例内存之后开始使用 swap
可在 /proc/sys/vm/swappiness 文件中进行调整,默认是 60。该参数可以从 0 -100 进行设置。0 就是最大限度使用内存,尽量不使用 swap;100 就是积极使用 swap。A low value means the kernel will try to avoid swapping as much as possible where a higher value instead will make the kernel aggressively try to use swap space

临时修改 swappiness 参数的方法(不能直接 vi /proc/sys/vm/swappiness),重启后失效
方法 1:echo 60 /proc/sys/vm/swappiness
方法 2:sysctl vm.swappiness=60

永久修改 swappiness 参数的方法, 重启后生效
修改 /etc/sysctl.conf 里面的 vm.swappiness,可以直接 vi /etc/sysctl.conf

开启关闭 swap 交换分区
swapoff /dev/dm-1
swapon /dev/dm-1

swap 交换分区不是 tmpfs 对应的 /dev/shm 分区,而是 swapon - s 对应的 Filename 的分区
[root@localhost ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       4194296 42352   -1
[root@localhost ~]# ll /dev/mapper/VolGroup-lv_swap
lrwxrwxrwx 1 root root 7 6 月  27 10:34 /dev/mapper/VolGroup-lv_swap – ../dm-1
[root@localhost ~]# fdisk -l|grep swap
Disk /dev/mapper/VolGroup-lv_swap: 4294 MB, 4294967296 bytes
[root@localhost ~]# ll /dev|grep dm-1
brw-rw—-   1 root disk    253,   1 6 月  27 10:34 dm-1
[root@localhost ~]# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   35G  3.6G   30G  11% /
tmpfs                         3.9G   72K  3.9G   1% /dev/shm
/dev/sda1                     485M   39M  421M   9% /boot
/dev/sdb1                     197G  100G   87G  54% /db

Swap 大小如何确定
CENTOS 官网采用如下公式:
M = Amount of RAM in GB
S = Amount of swap in GB,
then If M 2, S = M *2 Else S = M + 2。

ORACLE 的官方文档推荐
RAM                        == Swap Space
Up to 512 MB               == 2 times the size of RAM
Between 1024 MB and 2048 MB== 1.5 times the size of RAM
Between 2049 MB and 8192 MB== Equal to the size of RAM
More than 8192 MB          == 0.75 times the size of RAM

查看 Swap 内存的命令
free 和 swapon - s 和 cat /proc/swaps 三者都可以看到大概的 Swap 信息
swapon - s 和 cat /proc/swaps 还可以看到 Swap 对应的磁盘信息
vmstat 可以看到间隔时间内 Swap in、Swap out 的大小
[root@localhost ~]# free -k|grep Swap
Swap:      4194296      42352    4151944
[root@localhost ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       4194296 42352   -1
[root@localhost ~]#  cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       4194296 42352   -1

[root@localhost ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          7872       6580       1292          0        104       1037
-/+ buffers/cache:       5339       2433
Swap:         4095       3241       854

第二行
total = used + free

第三行
(-buffers/cache) used 内存数:第一部分 Mem 行中的 used – buffers – cached(反映的是被程序实实在在用掉的内存)
(+buffers/cache) free 内存数: 第一部分 Mem 行中的 free + buffers + cached(反映的是可以挪用的内存总数)

第四行
指 SWAP 交换分区

1)如果没有 swap:
swap 用了 3241M,空闲的物理内存是 2433M,也就是说,如果没有 swap,内存已经爆了。
2)swap 并没有影响到性能:
系统还有足够的物理内存(2433M),换句话说,现在 swap 里存储的还是不常使用的数据(也就是 swap 正在发挥正常的作用)。

[root@localhost ~]# vmstat 3
procs ———–memory———- —swap– —–io—- –system– —–cpu—–
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0  42352 1322484 209984 6182296    0    0    17    21    4    3  0  0 100  0  0
 0  0  42352 1322484 209984 6182296    0    0     0     0   42   34  0  0 100  0  0
 0  0  42352 1322484 209984 6182296    0    0     0     0   38   36  0  0 100  0  0
 0  0  42352 1322484 209984 6182296    0    0     0     0   61   43  0  0 100  0  0
 0  0  42352 1322484 209984 6182296    0    0     0     0   34   33  0  0 100  0  0

vmstat 3 表示每 3 秒收集一次
si 表示当前(三秒钟之内) 交换回内存 (Swap in) 的总量,单位为 kbytes;
so 表示当前 (三秒钟之内) 交换出内存 (Swap out) 的总量,单位为 kbytes。 

看完上述内容,你们掌握如何进行 SWAP 知识的理论分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计4445字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)