操作系统swap对redis的性能的影响以及解决方案

一、操作系统SWAP

swap是操作系统的行为,是指当内存不足时,操作系统将内存的数据拿出一部分放入磁盘,数据从内存和磁盘换入换出的机制,涉及到磁盘的IO。一旦发生swap,内存对应的进程的性能都会受到影响,因为硬盘的访问速度远远小于内存。

redis作为内存数据库,如果redis对应的内存发生了swap,那么redis的性能会受到极大的影响。

二、Redis为什么会触发swap

触发swap的核心原因是机器内存不足,对于redis来说有两个原因会触发swap:

  1. redis自身占用了大量内存,导致机器可用内存不足
  2. redis所在机器其他进程占用内存,导致内存不足。

三、查看Redis swap情况

查找redis对应的进程id

src/redis-cli info | grep process_id

进入redis对应的进程目录

 cd /proc/5910

查看swap

cat smaps | egrep '^(Swap|Size)'

上图中size代表redis实例占用的一块内存空间,都有一个对应的Swap,swap的大小代表该内存空间区域有多少已经被换到硬盘了,如果size和swap相等,则代表已经全部被换到了内存空间。

如果出现几百MB设置GB级别的swap时,说明redis的内存压力极大,会变慢,这个时候就需要解决这个问题。

四、解决Redis swap

最直接的办法就是增大redis实例所在机器的内存

集群部署的redis可以通过增加实例个数,减少每个实例所需要的内存。

另外一个办法就是把redis单独部署,不要和其他应用程序一起部署,这也是比较常规的实践,同时也避免了cpu的竞争。

posted @ 2021-01-31 17:49  ibrake  阅读(1042)  评论(0编辑  收藏  举报