设为首页 收藏本站
查看: 1360|回复: 0

[经验分享] redis-oom-command-not-allowed报错

[复制链接]

尚未签到

发表于 2016-12-18 11:40:11 | 显示全部楼层 |阅读模式
  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输出,看看内存配是否达到了上限。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-316002-1-1.html 上篇帖子: redis表设计 下篇帖子: redis学习笔记-添加访问密码,设置随机启动
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表