Redis 无法正常关闭服务
前置知识:Redis最简单的基本命令:
1. 系统终端
./redis-server 启动redis服务
./redis-cli 启动redis客户端
./redis-cli shutdown 关闭redis服务
2. 在使用./redis-cli进入redis命令终端之后,
shutdown 关闭redis服务
save 保存存储至磁盘
set [key] [value] 对键[key]赋值[value]
get [key] 获取键[key]对应的值
问题描述:
Redis安装完成,使用./redis-server启动之后,运行./redis-cli进入redis终端,对键值的操作可正常完成,但shutdown与save会报错,具体在终端或者日志中体现为:
1. shutdown请求失败:
1550:M 02 Jan 18:22:48.778 # User requested shutdown...
1550:M 02 Jan 18:22:48.779 * Saving the final RDB snapshot before exiting.
1550:M 02 Jan 18:22:48.781 # Failed opening the RDB file dump.rdb (in server root dir /usr/share/redis/redis-3.2.6/src) for saving: Permission denied
1550:M 02 Jan 18:22:48.782 # Error trying to save the DB, can't exit.
2. save失败
1550:M 02 Jan 18:42:05.298 # Failed opening the RDB file dump.rdb (in server root dir /usr/share/redis/redis-3.2.6/src) for saving: Permission denied
shutdown和save失败的原因是一样的,对rdb文件dump.rdb的操作过程出现问题(虽然日志中显示permission denied,但不一定为权限问题,可能是目录或则文件无法生成等多方面)
解决方法:
综合考虑了以下两点(非常抱歉,因为两部分都同时修改后问题解决,所以无法确定是哪一点导致上述问题)
1. 在服务启动之后,日志信息有如下Warning显示:
1550:M 02 Jan 18:16:12.147 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1550:M 02 Jan 18:16:12.148 # Server started, Redis version 3.2.6
1550:M 02 Jan 18:16:12.148 # 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.
1550:M 02 Jan 18:16:12.148 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
据此推测可能由于某些存储上的上限极低(上述日志貌似默认0了),导致创建文件失败,这里笔者理解为:没有创建大小为X的文件的权限导致permission denied
2. 根据报错日志显示rdb文件是建立在 /usr/share/redis/redis-3.2.6/src(即redis安装目录)下,但实际查看时此目录并木有rdb文件,即使redis是在系统的root用户下启动服务,shutdown和save依旧会出现上述error。所以感觉在这里没有文件权限的可能性应该不大,不过最后还是修改配置文件更新了rdb文件的默认生成目录。
操作:
1. 解决Warning
A. 终端root用户执行:sysctl vm.overcommit_memory=1
B. 终端root用户执行:echo never > /sys/kernel/mm/transparent_hugepage/enabled
C. 终端root用户执行:vim /etc/rc.local,在打开文件之后,将echo never > /sys/kernel/mm/transparent_hugepage/enabled加入在语句exit 0之前
2. 更改rdb文件默认路径
修改conf文件,在这里建议,复制一份新的conf文件,如test.conf,在test.conf进行修改,之后启动redis时,使用脚本./redis-server test.conf启动服务。
修改方式:在redis原来的解压目录下找到redis.conf文件(也可以在终端用命令locate redis.conf查找其位置),
打开后定位到如下位置:
# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir ./
将其中的"dir ./"修改为相应的目录,如"dir /home/distance/redis_dbfiles/"(这里需要注意最后的斜杠不能忘记,如果缺失斜杠可能会解析为文件而非目录),保存。
上述操作完成之后,可以正常save与shutdown。
Redis 无法正常关闭服务的更多相关文章
- windows下安装Redis并部署成服务
windows下安装Redis并部署成服务 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 一:下载 下载地址: windows版本: http ...
- Redis Sentinel 高可用服务搭建
阅读目录: 关于 Redis 的概念 关于 Redis Sentinel 的概念 搭建 Redis Server(master) 搭建 Redis Server(slave) 搭建 Redis Sen ...
- 使用Windows命令行启动关闭服务(net,sc用法)
下面两个命令最好以管理员方式启动cmd窗口,否则出现权限问题. 1.net用于打开没有被禁用的服务, NET命令是功能强大的以命令行方式执行的工具. 它包含了管理网络环境.服务.用户.登陆大部分重要的 ...
- Linux 下的 Redis 安装 && 启动 && 关闭 && 卸载
转自https://blog.csdn.net/zgf19930504/article/details/51850594 Redis 在Linux 和 在Windows 下的安装是有很大的不同的,和通 ...
- mysql和redis加入到windows服务
mysql加入到windows服务: mysqld --install Mysql5.6 mysqld --remove mysql5.6 从windows的服务中删除mysql服务 net st ...
- 在Windows下将Redis注册为本地服务
当前redis版本:3.2.100 通常情况下我们可以通过 redis-server.exe 和配置文件启动redis服务 : redis-server.exe redis.windows.conf ...
- 【转载】Redis Sentinel 高可用服务架构搭建
作者:田园里的蟋蟀 出处:http://www.cnblogs.com/xishuai/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接. 阅读 ...
- Ubuntu 16.04设置Redis为开机自动启动服务
继上一篇文章http://www.cnblogs.com/EasonJim/p/7599941.html安装好Redis后,假设文件已经安装到/usr/local/redis目录下.假设我安装的版本为 ...
- CentOS 7.3 安装redis 4.0.2服务
CentOS 7.3 安装redis 4.0.2服务 1.下载解压 下载地址:/home/xiaoming/ wget http://download.redis.io/releases/redis- ...
随机推荐
- JAVA字符串05之课程问题解决
(一)古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:请编写一个程序,使用上述算法加密或解密用户输入的英文字串. 1.设计思想:首先选择是加密字符串还是解密字符串,两种算法相似.如果要加密字符串 ...
- for(String s:v)
s是遍历后赋值的变量,v是要遍历的list.可以通过以下语句进行测试: List<String> v=new ArrayList(); v.add("one"); v. ...
- The ProgID of the WorkspaceName's workspace factory
The ProgID of the WorkspaceName's workspace factory [C#]public stringWorkspaceFactoryProgID {get; se ...
- java selenium (八) Selenium IDE 用法
Selenium IDE 是Firefox 浏览器的一个插件, 它会记录你对Firefox的操作,并且可以回放它的操作. 用法简单,不过我觉得这个没多大的用处 阅读目录 Selenium IDE ...
- java selenium (二) 环境搭建方法一
webdriver 就是selenium 2. webdriver 是一款优秀的,开源的,自动化测试框架. 支持很多语言. 本文描述的是用java Eclipse 如何搭建环境 阅读目录 ...
- JAVA中的字符串操作
一.替换 1.把对应字符换成新的字符 比如"D:\java_learn"中的'\'换成‘\\’ String str = "D:\\java_learn\\JAVA学习\ ...
- (原创)如何使用selenium 驱动chrome浏览器并且打开方式为手机模式-转载请注明出处
随着移动设备使用率的不断增加,移动页面的测试也变得越来越重要. 对于互联网公司M站的测试,如果不通过专用的appium等移动端测试工具是否还有方便快捷的办法呢?答案当然是有啊. 使用chrome dr ...
- 移动互联网公司如何将BPM流程管理变身移动化?
背景介绍 OPPO是广东欧珀移动通信有限公司的旗下品牌,成立于2004年,是一家全球性的智能终端和移动互联网公司,致力于为客户提供最先进和最精致的智能手机.高端影音设备和移动互联网产品与服务,业务覆盖 ...
- List<T>的对比
对于类型的对比,linq原来的对比是区分不了的. 对两个list进行查询交集方法.交集,并集的函数是直接用Linq的,这里不再写. List<T> intersectList = quer ...
- Bash shell的内建命令:type
type指令是用来观察指令时来自于外部指令还是内建在bash中的指令. type [-tpa] name 选项与参数: :不加任何选项与参数时,type会显示出name是外部指令还是bash内建指 ...