解决linux下redis数据库overcommit_memory问题
背景
公司的redis有时background save db不成功,通过log发现下面的告警,很可能由它引起的:
[13223] 17 Mar 13:18:02.207 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
于是通过搜索,也有人跟我遇到同样的问题,基本可以确定是由它引起的。
内核参数overcommit_memory
它是 内存分配策略
可选值:0、1、2。
- 0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
- 1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
- 2, 表示内核允许分配超过所有物理内存和交换空间总和的内存
什么是Overcommit和OOM
Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。这种技术叫做Overcommit。当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory)。它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存。
当oom-killer发生时,linux会选择杀死哪些进程?选择进程的函数是oom_badness函数(在mm/oom_kill.c中),该函数会计算每个进程的点数(0~1000)。点数越高,这个进程越有可能被杀死。每个进程的点数跟oom_score_adj有关,而且oom_score_adj可以被设置(-1000最低,1000最高)。
解决方法:
很简单,按提示的操作(将vm.overcommit_memory 设为1)即可:
有三种方式修改内核参数,但要有root权限:
- (1)编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效
- (2)sysctl vm.overcommit_memory=1
- (3)echo 1 > /proc/sys/vm/overcommit_memory
到此这篇关于解决linux下redis数据库overcommit_memory问题的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
完美解决linux上启动redis后配置文件未生效的问题
修改redis.conf后,重启redis,发现修改的配置未生效,原来是需要在启动redis的时候在命令中加上配置文件,命令如下 ./redis-server /usr/local/redis-3.2.8/redis.conf & 仔细阅读配置文件可以开头看到有这样的描述 # Note that in order to read the configuration file, Redis must be # started with the file path as first argument
-
关于linux redis安装及安装遇到的问题
redis官方传送门 Linux安装Redis服务步骤: 获取资源指定安装目录 [root@hadoop-master mnt]# mkdir reids [root@hadoop-master redis]# cd redis [root@hadoop-master redis]# wget http://download.redis.io/releases/redis-6.0.5.tar.gz [root@hadoop-master redis# tar xzf redis-6.0.5.ta
-
Linux系统安装NoSQL(MongoDB和Redis)步骤及问题解决办法(总结篇)
如下是我工作中的记录,介绍的是linux系统下NoSQL:MongoDB和Redis的安装过程和遇到的问题以及解决办法: 需要的朋友可以按照如下步骤进行安装,可以快速安装MongoDB和Redis,希望可以帮助大家:)! 一.MongoDB 1.MongoDB安装 (1)将安装包mongodb-linux-i686-3.0.2.tgz拷贝到要安装的服务器中 这里我用的rz命令,如果不支持需要安装yum -y install lrzsz (2)解压安装程序 tar xzvf mongodb-lin
-
解决redis在linux上的部署的问题
1.在官网下载Linux版本redis 2.拷贝到linux服务器上,解压到指定目录 3.解压后得到redis文件夹-----移动到自己知道的文件位置 4.注:redis是c语言编写,需要依托c语言环境 yum install gcc-c++ tcl 进入到redis安装目录 执行 make---------------编译redis 注意:redis6以上版本make编译可能报错,需要升级gcc版本 #第一步 sudo yum install centos-release-scl #第二步 s
-
解决linux下redis数据库overcommit_memory问题
背景 公司的redis有时background save db不成功,通过log发现下面的告警,很可能由它引起的: [13223] 17 Mar 13:18:02.207 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf a
-
Linux下Redis数据库的安装方法与自动启动脚本分享
安装Redis (1) 下载Redis wget http://redis.googlecode.com/files/redis-2.2.11.tar.gz tar xzvf redis-2.2.11.tar.gz (2) 编译并安装Redis make && make install (3) 复制并修改配置文件 cp redis.conf /etc/redis.conf vi /etc/redis.conf 注意修改以下几项: daemonize yes loglevel warn
-
Linux服务器安装redis数据库图文教程
这篇跟大家聊聊redis非关系型数据库在Linux服务器的安装. redis简单介绍 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(lis
-
解决Linux下Mysql5.7忘记密码问题
一.问题 linux下的mysql5.7忘记密码 二.解决 •第一步:打开mysql5.7的配置文件my.cnf,并在里面增加一行:skip-grant-tables 保存并退出(:wq) [root@iz09a32x1sghz3z ~]# vi /etc/my.cnf •第二步:重启mysql [root@iz09a32x1sghz3z ~]# service mysqld restart •第三步:登录mysql并且修改密码 用root账号登录: [root@iz09a32x1sghz3
-
Linux下redis的安装与使用图文教程
本文实例讲述了Linux下redis的安装与使用.分享给大家供大家参考,具体如下: redis官网地址:http://www.redis.io 最新版本:3.2.6 1.下载.解压 wget http://download.redis.io/releases/redis-3.2.6.tar.gz 2.编译.安装 a.编译 make b.安装 make install 3.Redis的部署 安装成功后,下面对Redis 进行部署 a.首先为了方便管理,将Redis文件中的conf配置文件和常用命令
-
解决linux下openoffice word文件转PDF中文乱码的问题
网上很多介绍是由于jdk中的没有字体导致乱码,而我遇到的是转换过程并未报错,但转换后的PDF中是乱码,尝试在jre/lib/fonts/中增加字体,还是不能解决问题,因此可以判断非jre字体问题,是linux系统字体问题. 用vim /etc/fonts/fonts.conf,可以看到系统字体文件在/usr/share/fonts,将windows系统字体文件连接到此目录下 ln -s /usr/local/fonts fonts 然后更新缓存:fc-cache 重启openoffice: /o
-
LINUX下Oracle数据库用户创建方法详解
本文实例分析了LINUX下Oracle数据库用户创建方法.分享给大家供大家参考,具体如下: 1)登录linux,以oracle用户登录(如果是root用户登录的,登录后用 su - oracle命令切换成oracle用户) 2)首先要打开监听器命令如下:lsnrctl start,然后sqlplus /nolog ,然后conn /as sysdba,然后startup(这一部分命令是用来打开oracle数据库) 3)查看我们常规将用户表空间放置的位置:执行如下sql: SQL> select
-
解决linux下vim中文乱码的方法
Vim编码的详细介绍 Vim和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,这当然包括 UCS-2.UTF-8 等流行的 Unicode 编码方式. Vim 有四个跟字符编码方式有关的选项,encoding.fileencoding.fileencodings.termencoding (这些选项可能的取值请参考 Vim 在线帮助 :help encoding-names),它们的意义如下: 1.encoding: Vim 内部使用的字符编码方式,包括 Vim 的 buf
-
深入解析Linux下MySQL数据库的备份与还原
深入解析Linux下MySQL数据库的备份与还原 1. 备份 [root@localhost ~]# cd /var/lib/mysql (进入到MySQL库目录,根据自己的MySQL的安装情况调整目录) [root@localhost mysql]# mysqldump -u root -p voice>voice.sql,输入密码即可. 2. 还原法一:[root@localhost ~]# mysql -u root -p 回车,输入密码,进入MySQL的控制台"mysql>&
-
Linux下Redis设置密码及开机自启动
1.设置Redis.conf中daemonize为yes,确保守护进程开启: 找到#requirepass foorbared这一行,直接替换掉这行,改为requirepass 新密码 2.编写开机自启动脚本 vi /etc/init.d/redis 脚本内容如下: #!/bin/sh #chkconfig: 2345 80 90 # Simple Redis init.d script conceived to work on Linux systems # as it does use of
随机推荐
- Oracle触发器用法实例详解
- tomcat环境变量详细配置步骤
- iOS 二维码扫描和应用跳转
- python出现"IndentationError: unexpected indent"错误解决办法
- 基于匀速运动的实例讲解(侧边栏,淡入淡出)
- CSS(js)限制页面显示的文本字符长度
- JavaScript使用DeviceOne开发实战(三)仿微信应用
- Android仿微信照片选择器实现预览查看图片
- Python多进程编程技术实例分析
- js实现的类似于asp数据字典的数据类型代码实例
- VeryCD 名言警句[堪称经典]
- 详解在 CentOS 6.x上安装 docker.io
- SQL Server 2008中的代码安全(八)透明加密(TDE)
- php断点续传之如何分割合并文件
- 一个JQuery写的点击上下滚动的小例子
- 详细总结Javascript中的焦点管理
- C语言中的函数指针学习笔记
- C#判断上传文件是否是图片以防止木马上传的方法
- php调用自己java程序的方法详解
- 基于React Native 0.52实现轮播图效果