OOM command not allowed when used memory > 'maxmemory'.报错
作者:吴炳锡 来源:http://wubx.net/ 联系方式: wubingxi#163.com 转载请注明作/译者和出处,并且不能用于商业用途,违者必究.
OOM command not allowed when used memory > ‘maxmemory’ 报错排查
grep “OOM command not allowed when used memory > ‘maxmemory'” * -rsrc/redis.c: “-OOM command not allowed when used memory > ‘maxmemory’.\r\n”));
查看src/redis.c
shared.oomerr = createObject(REDIS_STRING,sdsnew( "-OOM command not allowed when used memory > 'maxmemory'.\r\n")); 。。。 /* Handle the maxmemory directive. * * First we try to free some memory if possible (if there are volatile * keys in the dataset). If there are not the only thing we can do * is returning an error. */ if (server.maxmemory) { int retval = freeMemoryIfNeeded(); if ((c->cmd->flags & REDIS_CMD_DENYOOM) && retval == REDIS_ERR) { flagTransaction(c); addReply(c, shared.oomerr); return REDIS_OK; } }
shared . oomerr = createObject ( REDIS_STRING , sdsnew ( "-OOM command not allowed when used memory > 'maxmemory'.\r\n" ) ) ; 。。。 /* Handle the maxmemory directive. * * First we try to free some memory if possible (if there are volatile * keys in the dataset). If there are not the only thing we can do * is returning an error. */ if ( server . maxmemory ) { int retval = freeMemoryIfNeeded ( ) ; if ( ( c - & gt ; cmd - & gt ; flags & amp ; REDIS_CMD_DENYOOM ) & amp ; & amp ;retval == REDIS_ERR ) { flagTransaction ( c ) ; addReply ( c , shared . oomerr ) ; return REDIS_OK ; } } |
从代码确认报这个错,大概是内存达到最大限时不能释放出来内存报的错。
做一个简单的验证:
配置一个10M大小的Redis,利用一个python程序往里面写数据,很快得到报错:
#python t_redis.py Traceback (most recent call last): File "t_redis.py", line 21, in <module> start() File "t_redis.py", line 15, in start s = r.set(key, v1) File "/usr/lib/python2.6/site-packages/redis/client.py", line 647, in set return self.execute_command('SET', name, value) File "/usr/lib/python2.6/site-packages/redis/client.py", line 330, in execute_command **options File "/usr/lib/python2.6/site-packages/redis/client.py", line 312, in _execute_command return self.parse_response(command_name, **options) File "/usr/lib/python2.6/site-packages/redis/client.py", line 390, in parse_response response = self._parse_response(command_name, catch_errors) File "/usr/lib/python2.6/site-packages/redis/client.py", line 349, in _parse_response raise ResponseError(response) redis.exceptions.ResponseError: OOM command not allowed when used memory > 'maxmemory'.
#python t_redis.py Traceback ( most recent call last ) : File "t_redis.py" , line 21 , in & lt ; module & gt ; start ( ) File "t_redis.py" , line 15 , in start s = r . set ( key , v1 ) File "/usr/lib/python2.6/site-packages/redis/client.py" , line 647 , in set return self . execute_command ( 'SET' , name , value ) File "/usr/lib/python2.6/site-packages/redis/client.py" , line 330 , inexecute_command * * options File "/usr/lib/python2.6/site-packages/redis/client.py" , line 312 , in_execute_command return self . parse_response ( command_name , * * options ) File "/usr/lib/python2.6/site-packages/redis/client.py" , line 390 , in parse_response response = self . _parse_response ( command_name , catch_errors ) File "/usr/lib/python2.6/site-packages/redis/client.py" , line 349 , in _parse_response raise ResponseError ( response ) redis . exceptions . ResponseError : OOM command not allowed when used memory& gt ; 'maxmemory' . |
结论:
- Redis运行中监控内存的使用情况.
- 如果只做缓存使用,需要配置上lru策略,如
maxmemory-policy allkeys-lru maxmemory-samples 5
maxmemory - policy allkeys - lru
maxmemory - samples 5
- 故障现场要看一下Redis的info输出,看看内存配是否达到了上限。
相关推荐
redis-stack-server-7.2.0-v9.arm64.snap redis-stack-server-7.2.0-v9.bionic.arm64.tar.gz redis-stack-server-7.2.0-v9.bionic.x86_64.tar.gz redis-stack-server-7.2.0-v9.bullseye.x86_64.tar.gz redis-stack-...
redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-5.0.5.redis-...
解压后,你可以找到包括`redis-server.exe`、`redis-cli.exe`等在内的可执行文件,以及配置文件`redis.conf`。这种方式适合于需要自定义配置或手动管理服务的用户。通过编辑`redis.conf`,你可以调整Redis的各项参数...
redis-5.0.14-1.el7.remi.x86_64.rpm安装包(含有部署手册) redis-5.0.14-1.el7.remi.x86_64.rpm安装包(含有部署手册) redis-5.0.14-1.el7.remi.x86_64.rpm安装包(含有部署手册) redis-5.0.14-1.el7.remi.x86_64.rpm...
tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-redis-session-manager-1.2-tomcat-7-java-7tomcat-...
在这个场景中,我们关注的是Redis的集群搭建,涉及到的文件是"redis-3.0.0.tar"和"redis-3.0.0.gem"。这两个文件分别对应Redis服务本身和通过Ruby来创建Redis集群的工具。 首先,`redis-3.0.0.tar`是一个源代码...
"Redis++使用说明,windows下编译Redis-Plus-Plus" 在这篇文章中,我们将详细介绍如何在Windows平台下编译Redis++,包括编译hiredis.lib和Win32_Interop.lib静态库文件的过程,然后安装Cmake并编译Redis++,最后...
**Redis-Shake 3.0.0:阿里云Redis数据同步工具详解** Redis-Shake是阿里云Redis&MongoDB团队开发的一款开源工具,专门用于在不同的Redis实例之间进行数据迁移和同步。它提供了高效且灵活的数据迁移解决方案,帮助...
**Redis 全面检查工具:redis-full-check** Redis 是一款高性能的键值存储系统,广泛应用于缓存、数据库和消息中间件等场景。在实际应用中,为了确保 Redis 的稳定性和数据一致性,需要定期对 Redis 实例进行健康...
这个名为"Redis-x64-5.0.14.1"的压缩包是Redis针对Windows操作系统的64位版本,版本号为5.0.14.1。在Windows上运行Redis可能与Linux环境有所不同,但仍然提供了相同的核心功能。 1. **Redis的特性**: - **内存...
其中包含:redis-5.0.3.tar.gz + redis-5.0.4.tar.gz + redis-5.0.5.tar.gz 以及。。。 一个redis的下载地址,各版本可选。 以及…… 可以思考下收藏这个网站,见压缩包。
《Redis-Py-Cluster:Python中的Redis集群库详解》 Redis-Py-Cluster是一个Python库,专门用于在Python环境中操作Redis分布式集群。该库为开发者提供了便捷的方式与Redis集群进行交互,支持各种数据结构,如字符串...
本次提供的版本是Redis的稳定版——Redis-x64-5.0.14.1,针对64位操作系统设计。在深入探讨Redis之前,我们先了解下Redis的基本特性。 1. **数据类型**: Redis支持五大数据类型:字符串(String)、哈希(Hash)、列表...
redis-5.0.14/src/redis-cli --cluster create 192.168.129.98:7000 192.168.129.99:7003 192.168.129.99:7002 192.168.129.126:7005 192.168.129.126:7004 192.168.129.98:7001 --cluster-replicas
1: 下载redis-5.0.4.tar.gz 2: 解压源码并进入目录 tar zxvf redis-5.0.4.tar.gz cd redis-5.0.4 3: 不用configure 4: 直接make (如果是32位机器 make 32bit) 查看linux机器是32位还是64位的方法:file /bin/...
**Redis-Shake简介** Redis-Shake是一款由Go语言编写的高效数据同步工具,专为解决在不同Redis实例间的数据迁移和同步问题而设计。它具备强大的功能和灵活性,能够满足用户在复杂环境中对数据迁移的需求,确保在...
《深入理解Tomcat-Redis-Session-Manager:在Tomcat7和Tomcat8中的应用》 在现代Web应用程序开发中,session管理是一个至关重要的环节,它涉及到用户会话的持久化和跨请求的数据共享。传统的session管理方式在高...
在这个压缩包中,包含了两个不同版本的Redis软件:redis-3.2.12.tar.gz和redis-3.3.3.gem。 `redis-3.2.12.tar.gz`是Redis的源代码包,版本为3.2.12。这个版本的安全性相对较高,不容易被扫描出安全问题。解压此...
解压这个文件后,你可以找到Redis服务器的所有组件,包括`redis-server.exe`(主服务进程)、`redis-cli.exe`(命令行客户端)、`redis-benchmark.exe`(性能测试工具)和`redis-check-dump.exe`等实用工具。...
redis-serviceinstall .cmd安装成服务脚本(redis设置成windows下的服务,redis-serviceinstall .cmd脚本内容如下) redis-server --service-install redis.windows-service.conf --loglevel verbose redis-server -...