操作系统swap对redis的性能的影响以及解决方案
一、操作系统SWAP
swap是操作系统的行为,是指当内存不足时,操作系统将内存的数据拿出一部分放入磁盘,数据从内存和磁盘换入换出的机制,涉及到磁盘的IO。一旦发生swap,内存对应的进程的性能都会受到影响,因为硬盘的访问速度远远小于内存。
redis作为内存数据库,如果redis对应的内存发生了swap,那么redis的性能会受到极大的影响。
二、Redis为什么会触发swap
触发swap的核心原因是机器内存不足,对于redis来说有两个原因会触发swap:
- redis自身占用了大量内存,导致机器可用内存不足
- 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的竞争。
作者:iBrake
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.