之前有一次zabbix发出的swap报警,由于没有引发业务故障,故选择第二天进行处理。(一部分原因是睡着了,囧~)
swap是干什么的?在Linux中,当物理内存耗尽时如果有新的内存请求,此时内存中不活跃的页,会被移到swap空间中。swap一般是磁盘分区时分出来的一小部分磁盘空间。显然这部分放在swap中的数据对应的业务,跟放在物理内存中相比,会造成体验的下降。但swap会在系统崩溃时提供安全机制,或者会在内存耗尽的情况下阻止操作系统kill掉进程。因为一旦swap也被耗尽了,就会触发OOM(Out Of Memory)killer机制,这个机制通过一系列复杂的判断,默认的话是杀掉占用内存最多的进程!在系统安装过程中,不选择swap会提示警告,可以忽略警告继续安装。但我们自己可控的生产环境还是建议设置适当大小swap来保证稳定性。不过现在一些云主机都舍去了swap,比如自己春节期间购买的良心云和小伙伴手里的套路云,swap大小都是0;而vultr上的则是正常swap。(国内搞技术的胆子就是大啊,笑)
这里是red hat官方给出的swap大小设置建议:
怎样查看当前系统的swap消耗情况呢,除了使用free -m,还可以通过vmstat查看实时状态:
vmstat 1
其中参数1表示每秒刷新一次,SWAP那一列中,si表示从磁盘swap空间中回到内存的量,so表示目前swap中已经使用的量。较好的情况下我们希望这两个数保持为0:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 511020 2076 382240 0 0 0 0 28 32 0 0 100 0 0 1 0 0 511020 2076 382240 0 0 0 0 35 29 0 0 100 0 0 0 0 0 511020 2076 382240 0 0 0 0 26 33 0 0 100 0 0 0 0 0 511020 2076 382240 0 0 0 0 40 34 0 0 100 0 0 0 0 0 511020 2076 382240 0 0 0 0 38 35 0 0 100 0 0 0 0 0 510988 2076 382240 0 0 0 0 25 25 0 0 100 0 0 0 0 0 511020 2076 382240 0 0 0 0 58 53 0 0 100 0 0
如果发现swap出现了异常占用,可以考虑通过关闭再开启swap的手段实现刷新:
swapoff -a && swapon -a
有时候,我们发现就算是内存尚未完全耗尽,也有可能引发swap的使用,这取决于内核中的swappiness参数设置:
[root@localhost ~]# sysctl -a | grep swappiness sysctl: reading key "net.ipv6.conf.all.stable_secret" sysctl: reading key "net.ipv6.conf.default.stable_secret" sysctl: reading key "net.ipv6.conf.ens33.stable_secret" sysctl: reading key "net.ipv6.conf.lo.stable_secret" vm.swappiness = 30 [root@localhost ~]#
这里vm.swappiness = 30表示系统有30%的可能性使用swap。我们可以人为降低其概率,那么我们设置到多少合适呢?一般来讲,一项技术的指标衡量在不同的环境下不是绝对的。比如,使用了内存的部分缓存数据库如redis,如果这部分内存跑到了swap中,会带来很糟糕的体验,实际上这种情况下我们可以认为没有swap,直接触发OOM将其干掉反而是好事,毕竟现在都是集群高可用服务,用户不会感知到节点挂掉。但也一定不要降低到0,毕竟0的话会引发未知的不稳定情况,而且swap的存在毕竟是个缓冲,理论上给了我们进程被干掉的缓冲时间。
比如,我们可以把它设置为10,适当降低发生swap的可能性:
[root@localhost ~]# echo "vm.swappiness = 10" >> /etc/sysctl.conf [root@localhost ~]# sysctl -p vm.swappiness = 10 [root@localhost ~]# cat /proc/sys/vm/swappiness 10 [root@localhost ~]#
本文不推荐更改swap的大小,毕竟现在硬盘空间便宜,理论上保留swap对稳定性有一定的好处,而且,有些系统休眠机制也是要用到swap空间的。尤其作为生产环境,为了提升性能减少其使用概率是可以的,但一般不要减少其大小导致不稳定因素。
评论列表,共 0 条评论
暂无评论