专栏首页DBA随笔Redis运维之swap空间

Redis运维之swap空间

Redis运维之swap空间

swap空间对于操作系统来说比较重要,当我们使用操作系统的时候,如果系统内存不足,常常会将一部分内存数据页进行swap操作,以解决临时的内存困境。swap空间由磁盘提供,对于高并发场景下,swap空间的使用会严重降低系统性能,因为它引入了磁盘IO操作。

在Linux中,提供了free命令来查询操作系统的内存使用情况,free 命令的结果中也包含了swap相关的情况,例如下面的结果中:

[root@VM-0-14-centos ~]# free -ht
              total        used        free      shared  buff/cache   available
Mem:           1.8G        1.3G         72M        692K        433M        283M
Swap:            0B          0B          0B
Total:         1.8G        1.3G         72M

我们可以看到swap的值都是0,说明当前的内存是没有配置swap空间的,目前的操作系统的内存是足够的,通常情况下swap一行的used列应该是0B比较好,它证明你的操作系统内存充足,没有发生swap空间的交换操作。

实时查看swap的使用

Linux中还为我们封装了vmstat这个命令来查看系统的相关性能指标,其中也包含swap空间,其中和swap有关的指标是si和so,分别代表swap in和swap out,我们看看vmstat的执行结果:

[root@VM-0-14-centos ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 4  0      0  73712  84464 362016    0    0     7    26    7    1  1  1 98  0  0

查看执行进程占用swap的情况

在Linux操作系统中,/proc/pid/smaps这个文件记录了当前进程所对应的内存映像信息,这个信息对于查询指定进程的swap使用情况很有帮助。下面以一个Redis实例进行说明:

[root@VM-0-14-centos ~]# ps -ef|grep redis    
root      1711     1  0 Jul20 ?        00:20:15 src/redis-server 127.0.0.1:21243
root      2370     1  0 Jul20 ?        00:20:18 src/redis-server 127.0.0.1:21244
root      2371     1  0 Jul20 ?        00:20:13 src/redis-server 127.0.0.1:21263
root      7815  5781  0 23:39 pts/3    00:00:00 grep --color=auto redis
root     14804     1  0 Jul20 ?        00:20:39 redis-server *:6379
我们以14804这个redis进程为例
[root@VM-0-14-centos ~]# cat /proc/14804/smaps | grep Swap
Swap:                  0 kB
Swap:                  0 kB
Swap:                  0 kB
.....
Swap:                  0 kB
Swap:                  0 kB
Swap:                  0 kB

通常情况下,Linux服务器不会等到所有物理内存都被使用完再使用swap空间,它引入swapiness这个变量来决定操作系统使用swap空间的倾向程度,它的取值是0~100,值越大,表示操作系统使用swap的可能性越高,反之则越低。swapiness变量值存在于系统配置文件/proc/sys/vm/swappiness 和/etc/sysctl.conf中,其前面的文件在重启之后,就失效了,只有将这个值写入后面的文件,才能长久的保存下去。

[root@VM-0-14-centos ~]# cat /proc/sys/vm/swappiness 
30

写入/etc/sysctl.conf的方法如下:

echo vm.swappiness={value} >> /etc/sysctl.conf

Redis在不同版本下,对于swapiness的建议配置也不一样,通常情况下,swapness的值可以设置为:0、1、60、100这几个。

其中:

设置为60是默认值,

设置为100则操作系统会主动使用swap空间,

设置成为0的话,在Linux3.4以及更早的Linux版本中,内存不够时,倾向使用swap而不是OOM killer,在Linux3.5以及之后的版本中,倾向使用OOM Killer而不是swap空间

设置为1的话,在Linux3.5以及后续版本中,内存不够用的时候,倾向于使用swap空间,而不是OOM Killer

多说一句:OOM kill是指Linux发现操作系统不可用的时候,也就是Out Of Memory的时候,强制杀死一些非内核进程,来保证有足够的可用内存进行分配。一般OOM的日志记录在系统日志/var/log/message中

本文分享自微信公众号 - DBA随笔(gh_acc2bbc0d447),作者:DBA随笔

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Redis开发与运维学习笔记---(13)

    我们知道redis的数据都保存在内存中,如何高效利用内存变得尤为重要。这里主要从内存消耗、管理内存的原理与方法、内存优化技巧三个方面来讲述如何高效实现内存的存储...

    AsiaYe
  • MySQL参数之sql_slave_skip_counter

    在MySQL5.5和MySQL5.6中,处理主从复制断开的问题时,经常会用到sql_slave_skip_counter这个参数,一般是将这个参数设置...

    AsiaYe
  • 异步任务队列Celery在Django中的应用

    关于Django的介绍,之前在2018年9月17号的文章中已经讲过了,大家有兴趣可以翻翻之前的文章,这里再简单介绍下:

    AsiaYe
  • Linux环境下swap配置方法

    安装Linux系统之后,默认是没有swap分区,那么我们怎样增加和删除swap分区。

    剑行者
  • linux中Centos7增加swap分区详解

    RAM<=4G,swap=2G;RAM>4G,<16G,swap=4G;RAM>16G,<64G,swap=8G;RAM>64G,<256G,swap=16G

    砸漏
  • CentOS7系统增加swap的操作方法实例

    swap是位于磁盘上的特殊文件(或分区),属于“虚拟内存”的一部分。通俗点就是内存的备胎,内存充足的情况下,基本上没swap什么事(和设置有关);内存不够用时系...

    砸漏
  • ubuntu中swap(虚拟内存)设置方法

    其中count的大小对应swap的大小,如上述代码所示count=100000为大约100M

    砸漏
  • C++核心准则C.165: 为定制点使用using关键字​

    To find function objects and functions defined in a separate namespace to "custo...

    面向对象思考
  • Linux学习笔记之Linux系统的swap分区

    Swap分区在系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些...

    Jetpropelledsnake21
  • C++核心准则C.84:swap函数不应该失败

    swap is widely used in ways that are assumed never to fail and programs cannot e...

    面向对象思考

扫码关注云+社区

领取腾讯云代金券