redis.conf 设置的daemonize yes后台运行,使用redis-server redis.conf之后没有任何反应,以为启动成功
使用 ps -ef|grep redis 查看redis进程发现没有,修改redis.conf配置中的logfile的值,打印日志例如: logfile “/usr/local/redis/log/redis.log”
再次使用redis-server redis.conf命令启动redis,之后再从/usr/local/redis/log/redis.log redis的日志文件中查看日志信息:
24120:M 29 Mar 09:59:05.556 * Increased maximum number of open files to 10032 (it was originally set to 1024).
…
24120:M 29 Mar 09:59:22.368 # Server started, Redis version 3.2.9
24120:M 29 Mar 09:59:22.368 # 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.
24120:M 29 Mar 09:59:22.388 # 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.
24120:M 29 Mar 09:59:22.388 # Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check-aof –fix <filename>
根据上面warning提示信息进行处理:
echo 1 > /proc/sys/vm/overcommit_memory
echo “vm.overcommit_memory=1” >> /etc/sysctl.conf
echo never > /sys/kernel/mm/transparent_hugepage/enabled
./redis-check-aof –fix <filename>
之后重新启动 redis-server redis.conf成功
解释:
overcommit_memory参数说明: 设置内存分配策略(可选,根据服务器的实际情况进行设置) /proc/sys/vm/overcommit_memory 可选值:0、1、2。 0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。 2, 表示内核允许分配超过所有物理内存和交换空间总和的内存
redis在dump数据的时候,会fork出一个子进程,理论上child进程所占用的内存和parent是一样的,比如parent占用的内存为8G,这个时候也要同样分配8G的内存给child,如果内存无法负担,往往会造成redis服务器的down机或者IO负载过高,效率下降。所以这里比较优化的内存分配策略应该设置为 1(表示内核允许分配所有的物理内存,而不管当前的内存状态如何)。
echo是一种最常用的与广泛使用的内置于Linux的bash和C shell的命令,通常用在脚本语言和批处理文件中来在标准输出或者文件中显示一行文本或者字符串。
echo可以使用重定向符来输出到一个文件而不是标准输
$ echo “Test” > test
参考:http://www.jbxue.com/LINUXjishu/5303.html