千家信息网

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

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,如何进行SWAP知识的理论分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Linux中的交换空间在物理内存量(RAM)已满时使用。如果
千家信息网最后更新 2024年11月23日如何进行SWAP知识的理论分析

如何进行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知识的理论分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

0