今天给各位分享Linux交换空间(SWAP)详解的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
交换空间的概念和作用:当内存不足时,将部分硬盘空间虚拟成内存,以解决内存容量不足的问题。如果系统内存不足,操作系统首先将内存中暂时不用的数据存储到硬盘中。交换空间以释放内存供其他程序运行。
虚拟内存和物理内存/交换空间的关系
交换空间设置大小:仅指物理内存大小。红帽官方的建议是,如果您不打算启用休眠功能且物理内存低于2G,则交换空间设置大小应为物理内存的两倍。如果物理内存在2GB到8GB之间,则交换空间设置大小等于物理内存。如果物理内存大于8GB,则交换空间至少需要4GB。在实际的产品环境中,除了参考物理内存的大小外,还必须考虑实际运行的程序。合理的交换空间大小通常是在测试环境中获得的。对于系统工程师来说,如果业务部门对交换空间的大小没有特殊要求,通常会根据物理内存的大小来设置交换空间。如果业务运行过程中发现交换空间不足,则需要增加交换空间大小。
Red Hat官方建议设置交换空间大小
检查交换空间信息:通常在生产环境中,操作系统运行在多用户非图形命令行模式下。我们可以通过在终端执行特定命令来查看交换空间信息。下面以RHEL/CentOS系统为例。通过查看/proc/swaps文件的内容并执行swapon -s命令,可以看到系统当前交换空间所在的dm设备,但不适合人类阅读。通过查看dm设备的映射关系,我们可以找到对应的dm设备。 LVM逻辑分区,还可以通过文件系统分区表/etc/fstab查看交换空间对应的分区信息。 free命令可以显示交换空间的大小和使用情况。
[root@linuxabc ~]# cat /proc/swaps
文件名类型大小使用优先级
/dev/dm-1 分区1261564 0 -2
[root@linuxabc ~]# swapon -s
文件名类型大小使用优先级
/dev/dm-1 分区1261564 0 -2
[root@linuxabc ~]# ls -l /dev/mapper/|grep dm-1
lrwxrwxrwx。 1 root root 7 Dec 7 17:51 cs-swap – ./dm-1
[root@linuxabc ~]# lvs
LV VG Attr LSize 池原始数据% Meta% 移动日志Cpy%Sync 转换
根cs-wi-ao—- 19.79g
交换CS-wi-ao—- 1.20g
[root@linuxabc ~]# grep -i swap /etc/fstab
/dev/mapper/cs-swap 无交换默认值0 0
[root@linuxabc ~]# lsblk
名称MAJ:MIN RM 尺寸RO 类型安装点
sda 8:0 0 12G 0盘
sda1 8:1 0 1G 0 部分/boot
sda2 8:2 0 11G 0 部分
cs根253:0 0 19.8G 0 lvm /
cs-swap 253:1 0 1.2G 0 lvm [交换]
[root@linuxabc ~]# free –help |egrep ‘mebibytes|gibibytes’
-m, –mebi 以兆字节为单位显示输出
-g, –gibi 以吉比字节为单位显示输出
[root@linuxabc ~]# free -m
可用的免费共享缓冲区/缓存总数
内存: 3709 392 2942 9 374 3075
交换: 1231 0 1231
[root@linuxabc ~]# free -g
可用的免费共享缓冲区/缓存总数
内存: 3 0 2 0 0 3
交换: 1 0 1
ps ax -o pid,args | ps ax -o pid,args | ps ax -o pid,args | grep -v ‘^ PID’|sed -e ‘s,^ *,’ /tmp/ps_ax.output
echo -n /tmp/结果
对于$(grep -l Swap /proc/[1-9]*/smaps ) 中的swappid ;做
交换使用=0
for x in $( grep Swap $swappid 2/dev/null |grep -v ‘\W0 kB’|awk ‘{print $2}’ );做
让交换使用+=$x
完毕
pid=$(echo $swappid| cut -d’ ‘ -f3|cut -d’/’ -f3)
if ([ $swapusage -ne 0 ] );然后
echo -ne ‘$swapusage kb\t\t’ /tmp/结果
egrep ‘^$pid ‘ /tmp/ps_ax.output |sed -e ‘s,^[0-9]* ,’ /tmp/results
菲
完毕
echo ‘使用仍在运行的进程进行顶部交换:’
排序-nr /tmp/结果|头-n 10
上述脚本的执行结果显示当前使用交换空间最多的10 个进程,按交换空间使用量降序排列。该脚本通常不显示进程正在使用的总交换空间。如果你杀死其中的这些进程,你会发现交换空间的使用量会减少。被杀死的进程可能是直接贡献者,也可能是高交换使用率的根本原因的受害者。
注1:如果上述脚本没有生成任何输出,则可能/proc/*/smap 中当前正在运行的进程都没有使用swap。可以使用以下命令进行简单测试:
# grep 交换/proc/[1-9]*/smaps
要记住的重要一点是,上面的脚本只会显示脚本运行时在该时间点交换空间的活动进程。系统很可能交换了一块空间,这在free 命令的输出中是可见的,但脚本没有显示输出。关键是,该脚本显示当前交换活动,不能用于历史数据收集。您可以使用sar 命令查看历史交换使用情况。
注2:要将显示的进程数更改为10 以外的值,请将“tail-10”修改为所需的数字。
注3:在2.6.18-128.el5(RHEL 5 update 3)之前的内核版本中,无法知道进程使用了多少交换空间。因此,在任何以前的RHEL 版本(所有RHEL 3、RHEL 4 和RHEL 5,直到RHEL 5 update 2)中,都不存在确定单个进程使用多少交换空间的必要内核代码。
注4:这也可以通过运行top 命令并将SWAP 列添加到输出来实现。要添加此列,请按f 键并按照提示选择SWAP。人们可能希望该字段显示程序交换的数量。不幸的是,top 使用以下公式本地显示此信息。
VIRT=SWAP + RES 或等于
交换=VIRT – RES
VIRT/RES/SHR含义
刷新交换空间:使用以下命令刷新交换空间:
# 交换-a
# swapon-a
警告:以这种方式刷新交换空间将强制交换空间的全部内容返回主内存。如果您的系统内存已经不足,这可能会导致它进入内存不足状态(OOM)。在使用此选项之前应给予适当的关注和考虑。如果系统内存不足,则在将交换空间内容放入内存之前可能需要回收内存,这可能会在短时间内降低性能。
增加物理内存:在某些情况下,交换空间不足可能会导致系统崩溃(频繁的换入/换出活动)。当系统中存在sar文件时(该文件位于/var/log/sa,必须安装sysstat软件包并且sysstat服务正在工作)并且sar文件包含连续的pswpin和pswpout记录。它表明系统没有足够的物理内存来满足当前的工作负载。系统需要额外的系统内存,其大小至少为当前总交换空间的大小。抖动通常会导致系统性能下降,因为它会导致大量磁盘I/O。使用SSD 的系统可能不会遇到这种系统性能下降的情况。
[root@linuxabc ~]# sar -W
12:00:00 AM pswpin/s pswpout/s 片段
05:20:00 上午0.21 0.00
05:30:00 上午0.08 0.85
05:40:00 上午0.47 0.00
05:50:00 上午3.58 1.71
06:00:00 上午2.48 0.00
06:10:00 上午39.91 7.17
06:20:00 上午0.21 2.72
06:30:00 上午13.30 1.04
增加交换空间大小:
方法一:通过添加SWAP文件来增加交换空间的方法如下:
确定新交换文件的大小(以兆字节(MB) 为单位),然后乘以1024 以确定块大小。例如,64 MB 交换文件的块大小为65536。以root 身份在shell 提示符下键入以下命令,其中count 等于所需的块大小: # dd if=/dev/zero of=/swapfile bs=1024 count=65536
将权限更改为“仅root 可读可写”:# chmod 600 /swapfile
使用以下命令生成交换文件:# mkswap /swapfile
要立即启用交换文件,而不是在启动时自动启用:# swapon /swapfile
要在启动时启用它,请编辑/etc/fstab 以包含以下内容,新的交换文件将在下次系统启动后启用。 /swapfile 交换交换默认0 0
添加新的交换文件并启用它后,通过以下命令的输出验证它是否已启用。 # swapon-s
# 猫/proc/交换
自由的
方法二:通过添加逻辑分区来增加交换空间的方法如下:
创建LVM 逻辑卷,例如使用1GB (-L 1G)。 VolGroup00 是创建LV LogVol02 的vg 名称# lvcreate VolGroup00 -n LogVol02 -L 1G
格式化新的交换空间:# mkswap /dev/VolGroup00/LogVol02
将以下条目添加到/etc/fstab 文件中: /dev/VolGroup00/LogVol02 swap swap defaults 0 0
启用扩展逻辑卷:# swapon -a
5要测试逻辑卷是否已成功创建,请执行以下命令之一:
# swapon-s
# 猫/proc/交换
自由的
方法三:扩展交换空间的逻辑分区,增加交换空间。方法如下:
关闭交换空间,扩展交换分区,然后重新生成交换分区,最后打开交换空间。
– swapoff- lvresize- mkswap- swapon
当交换空间即将耗尽时,会触发监控系统警报。如果可用内存大于交换空间,则可以刷新交换空间以释放交换空间的使用量。如果可用内存和交换空间即将耗尽,直接刷新交换空间可能会导致系统故障。挂掉,系统工程师首先要找到使用swap空间最多的进程,通常是与业务相关的进程,并与业务运维人员确认,尽快重启业务进程以释放内存,否则系统会慢慢变慢并触发OOM机制,系统开始自动杀死占用大量内存的进程,最后根据实际情况增加交换空间或物理内存。
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/129175.html
用户评论
花开丶若相惜
这篇文章写的真好!对我学习LINUX很有帮助,之前对交换空间理解很模糊,看了文章之后终于明白了它的作用和使用方法。以后我要好好练习一下。
有15位网友表示赞同!
我就是这样一个人
感觉作者把LINUX交参空间的知识点都概括得很清楚了,各种参数设置也解释得非常到位,不愧是经验丰富的博主!
有5位网友表示赞同!
微信名字
对于新手来说这篇博客真不错,轻松易懂地讲解了SWAP,我终于知道为什么内存不够用了会调用交换空间来临时救场了!哈哈。
有8位网友表示赞同!
摩天轮的依恋
感觉这文章没说这么多新鲜信息啊,网上也有很多其他解释交参空间的文章比这更详细和专业。
有20位网友表示赞同!
莫名的青春
我是个Linux老手吧,对SWAP的原理没什么问题,但关于一些调优技巧的部分我感觉可以更加深入一点,比如在不同场景下如何设置合适的swap分区大小。
有19位网友表示赞同!
南宫沐风
学习LINUX确实需要很多实践,这篇文章解释得很清楚,以后要多动手练习一下才能真正的掌握Linux交换空间的使用方法!
有6位网友表示赞同!
惦着脚尖摘太阳
看到文章讲到SWAP的性能问题,我瞬间被cue到了自己在服务器上曾遇到的内存不足问题,那时候也是调优了SWAP分区才解决了问题的。
有12位网友表示赞同!
陌上蔷薇
这篇文章让我明白很多LINUX操作系统的核心知识点,以前总觉得Linux很复杂,现在看来其实很容易理解。
有18位网友表示赞同!
迷路的男人
为什么这个文章里没有提一下最近的新换页算法呢? 感觉作者没有关注最新的科技发展啊!
有5位网友表示赞同!
╭摇划花蜜的午后
关于SWAP分区的大小控制,我觉得文章描述的不太具体,缺少一些实用的建议和经验分享,我之前在调优方面遇到过很多困难,希望博主可以提供更多实际案例讲解。
有6位网友表示赞同!
烟花巷陌
这篇文章确实对理解Linux交换空间很重要的一点讲解了,但是对于一些更复杂的场景,比如多节点集群的SWAP策略,文章没有详细解释,希望能有后续的文章进行深度解读。
有10位网友表示赞同!
淡抹烟熏妆丶
我平时也在学习LINUX,这本书写的很不错,让我对 交换空间有了更深的认识。以前总觉得Linux很神秘,现在看着好像也不那么复杂了,哈哈
有9位网友表示赞同!
心悸╰つ
文章讲得很好! 我之前一直以为SWAP只是一个临时内存空间,读完文章才知道它还有很多其他的用途和需要注意的地方。以后我要好好学习一下Linux的各种调优技巧!
有19位网友表示赞同!
一样剩余
我觉得这篇文章对于初学者来说非常有用,但对于一些资深的用户来说可能不太新鲜了。建议作者可以尝试结合最新的技术趋势和实践经验,来更新文章内容。
有7位网友表示赞同!
陌颜
我最近在优化 Linux 系统的性能,遇到了一些关于SWAP分区的问题,看了这篇博客后让我受益匪浅!感谢作者分享这方面的知识!
有16位网友表示赞同!
念初
LINUX 交换空间(SWAP)详解 感觉这个标题太大了点,其实文章只介绍了一部分内容,比如不同类型交换空间的使用场景还没有提到。
有10位网友表示赞同!
剑已封鞘
我一直在学习LINUX系统管理,觉得这篇文章很不错,特别是关于SWAP分区分配和调优的部分写的比较详细,对我很有帮助! 不过我希望作者能更新一下最新的相关技术信息和最佳实践。
有18位网友表示赞同!
寂莫
个人认为文章写的太简单了,对于一些复杂的场景比如虚拟化环境下SWAP的使用,都没有详细的解释,有点不够深入。我希望作者能针对不同类型的应用场景,提供更具体的指导意见
有19位网友表示赞同!