最近使用Redis,由于它属于内存数据库,所以调优都集中到了内存上。
根据 Redis官方说法 :
需要将 vm.overcommit 设置为1
sysctl vm.overcommit_memory=1
确保设置了一定量的swap,最好和内存一样大,否则内核的OOM(out-of-memory)killer会干掉Redis进程
若Redis是大量写入的应用,持久化的RDB或者AOF会按比例使用,或 很有可能使用redis使用量的一样多的内存 .
使用和Redis一样多的内存做持久化,那我岂不是都得让一半的内存出来给它?
还有那个overcommit是几个意思也不解释一样?搞砸了其他进程肿么办?
好吧,得研究一下内存是如何管理的:
内核会将物理内存分割成动态虚拟的内存页(page),然后在malloc时按overcommit_memory和overcommit_ratio的设置来确定是否允许分配虚拟内存页。
翻看Linux Kernel的文档/资料才发现,有三种值:
overcommit_memory=0 ,默认,智能超发,每次要求分配内存时,kernel都会比较请求的空间和空余的空间是否足以分配
overcommit_memory=1 ,请求分配内存时, 永远 假装还有足够的内存
overcommit_memory=2 ,不允许超发内存,即允许分配的大小小于
overcommit_ratio*物理内存+swap大小
好吧,Redis要大家假装还有空余内存…也就是说会有很大的几率触发Swap造成性能急剧下降,不过, 性能下降总比不能用好 。
说到swap,大家肯定给Redis服务器设定过swappiness=0,然后祈祷奇迹的发生,但是还是触发了swap。 为什么呢?
首先,Linux十分注重读写性能,尽量避免磁盘IO,你从磁盘上读取的文件会被放入内存,就算程序结束了,还是存在的,这部分内存被称为file buffer(或者file page),是swap重点照顾的回收对象。 其次,Linux上的用户态进程所有页(也就是redis运行时占用的)也是可以回收的。
其实,swap的触发机制是这样的:
根据swap倾向(swap_tendency)决定回收用户态页还是file buffer,最后把LRU队列中用得最少的放入swap空间中。
摘自LWN
以下是内核计算其 “swap倾向”的公式:
swap_tendency = mapped_ratio/2 + distress + vm_swappiness
其中:
distress 值是内核在释放内存时遇到的问题数。当内核第一次决定收回内存页面时, distress将为0;尝试次数越多,这个值也越大。
mapped_ratio值是 mapped page与总page
比例,即
mapped ratio = (nr mapped * 100) / total memory
nr_mapped可以从下面的命令行获得
grep nr_mapped /proc/vmstat
vm_swappiness 就是大家设定的swappniness值
当swap_tendency超过100时,swap就开始收集最近较少用的页。
而且swappiness设置为0,PRFA就不会回收用户态页,
设置为100时,总是回收用户态页,当然这不是我们想看到的。
最后回到之前的问题,怎么避免触发swap? 其实调整好swapiness之后,只需要监测/proc/zoneinfo中的pages free/high 之间的差值即可,high是当前zone中计算出来的高水位值,当pages free低于pages high才会触发swap回收页,就是这么简单啦~
实在担心的话可以用
redis-server --test-memory 需要测试的内存(MB)
测试一下,系统就会在给定的内存下跑测试。
分享到:
相关推荐
- 使用内存优化策略,如设置适当的缓存淘汰策略。 - 调整配置参数,如增大客户端连接数、优化持久化策略等。 - 监控系统资源,合理分配CPU和内存资源。 以上就是关于“Linux系统Redis免安装版”的详细知识讲解,...
Linux下的Redis是一个高效、开源的键值存储系统,常用于数据缓存、消息队列以及数据库等场景。Redis因其出色的速度和丰富的数据结构支持而备受青睐。本资源为"linux-redis绿色版",适用于在Linux环境中快速部署Redis...
在“linux免安装 redis”的主题下,我们主要关注如何在Linux环境中不通过传统安装步骤快速启动并使用Redis服务。以下是相关知识点的详细说明: 1. **Redis的免安装方式**: Redis通常可以通过编译源代码的方式在...
本文将详细讲解如何在Linux环境下安装Redis,以及如何配置主服务器和从服务器。 首先,让我们从安装Redis开始。在大多数Linux发行版中,可以通过包管理器进行安装。例如,在Ubuntu或Debian上,可以使用以下命令: ...
【Redis详解:Linux环境下的内存数据存储与持久化】 Redis,全称为Remote Dictionary Server,是一款高性能的键值存储系统,广泛应用于缓存、消息队列、数据库等多个领域。它以键值对的形式存储数据,支持丰富的...
Redis是一款开源、高性能的键值对存储系统,广泛...总之,这个资源包为Linux环境下的Redis安装和配置提供了便利,通过学习和实践,您可以更好地理解和掌握Redis的使用,为您的项目或产品添加强大的数据缓存和处理能力。
**PHPRedis:Linux环境下的Redis扩展** PHPRedis是一款高效的PHP扩展,专为连接和操作Redis键值存储系统而设计。Redis是一种开源、基于内存、支持网络的键值数据库,广泛应用于高速缓存、数据持久化等领域。在Linux...
在实际生产环境中,我们还需要关注Redis的性能监控和优化,包括内存管理、客户端超时设置、主从复制、Sentinel高可用方案以及AOF与RDB持久化策略的选择等。同时,定期更新到最新稳定版本以获取安全性和性能改进也是...
Redis是一款高性能的键值对数据库,常用于缓存和数据持久化。它的全名是Remote Dictionary Server,由Salvatore Sanfilippo创建。...了解其核心概念和数据结构,将有助于你更好地利用Redis来优化你的应用程序。
此"redis-3.2最稳定版本Linux/Mac"提供了针对这两种操作系统优化的Redis安装包,确保了在Linux和Mac环境下稳定运行。 Redis 3.2是Redis的一个重要里程碑,它在3.0版本的基础上进行了多方面的改进和增强。以下是关于...
在Linux环境下,Redis因其高效性能、丰富的数据结构以及简单易用的命令接口而备受推崇。这里我们关注的是Redis的最新版本——6.0.8。 Redis 6.0.8是Redis的一个稳定版本,它在前一版本的基础上进行了多项改进和优化...
### Linux 下 Redis 安装与配置详解 #### 一、Redis 概述 Redis 是一款开源的、基于键值对的高性能数据结构存储系统。它不仅提供了类似 memcached 的高速缓存特性,还具备数据持久化的功能。不同于 memcached,...
在Linux环境下配置Redis是一项基础但重要的任务,尤其对于那些依赖高效缓存处理的系统来说。Redis,全称为“Remote Dictionary Server”,是一款开源的、基于内存的数据结构存储系统,可用作数据库、缓存和消息...
这个压缩包包含了在Linux环境下运行Redis 7.2.3所需的所有文件。 Redis 7.2.3的更新可能包含性能优化、新功能的引入、bug修复以及对旧特性的改进。具体更新内容可以通过查看官方发布日志来详细了解。这里我们将主要...
以上就是关于“最新版linux redis-5.0.11.tar.gz”压缩包中包含的Redis 5.0.11在Linux环境下的安装、配置和使用的基本知识。理解并掌握这些内容,将有助于你更好地利用Redis来解决实际问题。在实际应用中,还需要...
Redis是一款高性能的键值对存储系统,常用于数据库、缓存和消息中间件等场景。在本案例中,我们讨论的是Redis的7.0.7版本针对Linux ...通过理解和掌握上述知识点,可以更好地利用Redis来优化应用程序的性能和数据管理。
在生产环境中,你可能还需要考虑更多的配置和优化,比如设置最大内存限制、调整客户端缓冲区大小、设置AOF(Append Only File)持久化策略等。同时,确保安全措施到位,比如限制网络访问,只允许特定IP连接,避免...
Redis是一款高性能的键值对数据库,常用于缓存、消息队列...而在Linux环境下,我们通过源码编译安装Redis,配置和启动服务。同时,为了优化性能,我们还可以利用连接池管理和控制Redis客户端的连接,提升系统整体效率。
Linux下Redis集群操作及常见问题的知识点主要包括: 1. Redis集群部署环境:首先需要确定部署主机,例如主机IP为***.***.***.**,然后确定部署目录,以及各个节点的配置和启动。 2. Redis节点配置和启动: - 修改...
**Linux服务器上Redis的安装与主从部署** Redis是一款高性能的键值存储系统,常用于数据库、缓存和消息中间件。在Linux服务器上安装和部署Redis,包括单机部署和主从部署,是运维工作中常见的任务。以下将详细介绍...