swap是操做系统的行为,是指当内存不足时,操做系统将内存的数据拿出一部分放入磁盘,数据从内存和磁盘换入换出的机制,涉及到磁盘的IO。一旦发生swap,内存对应的进程的性能都会受到影响,由于硬盘的访问速度远远小于内存。redis
redis做为内存数据库,若是redis对应的内存发生了swap,那么redis的性能会受到极大的影响。数据库
触发swap的核心缘由是机器内存不足,对于redis来讲有两个缘由会触发swap:性能
查找redis对应的进程id操作系统
src/redis-cli info | grep process_id
进入redis对应的进程目录code
cd /proc/5910
查看swapblog
cat smaps | egrep '^(Swap|Size)'
上图中size表明redis实例占用的一块内存空间,都有一个对应的Swap,swap的大小表明该内存空间区域有多少已经被换到硬盘了,若是size和swap相等,则表明已经所有被换到了内存空间。进程
若是出现几百MB设置GB级别的swap时,说明redis的内存压力极大,会变慢,这个时候就须要解决这个问题。内存
最直接的办法就是增大redis实例所在机器的内存。部署
集群部署的redis能够经过增长实例个数,减小每一个实例所须要的内存。class
另一个办法就是把redis单独部署,不要和其余应用程序一块儿部署,这也是比较常规的实践,同时也避免了cpu的竞争。