首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ubuntu 14.04上的Redis

Ubuntu 14.04上的Redis
EN

Stack Overflow用户
提问于 2014-07-15 02:18:59
回答 2查看 3.8K关注 0票数 3

我从ppa安装了redis 2.8.12,但未能启动。看看日志这就是我得到的:

代码语言:javascript
运行
复制
[4886 | signal handler] (1405388991) Received SIGTERM, scheduling shutdown...
[4886] 14 Jul 20:49:51.561 # User requested shutdown...
[4886] 14 Jul 20:49:51.561 * Saving the final RDB snapshot before exiting.
[4886] 14 Jul 20:49:51.566 * DB saved on disk
[4886] 14 Jul 20:49:51.566 * Removing the pid file.
[4886] 14 Jul 20:49:51.566 # Redis is now ready to exit, bye bye...
[6726] 14 Jul 20:56:04.063 # You requested maxclients of 10000 requiring at least 10032 max file descriptors.
[6726] 14 Jul 20:56:04.063 # Redis can't set maximum open files to 10032 because of OS error: Operation not permitted.
[6726] 14 Jul 20:56:04.063 # Current maximum open files is 1024. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'.
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 2.8.12 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in stand alone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 6726
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

[6726] 14 Jul 20:56:04.064 # Server started, Redis version 2.8.12
[6726] 14 Jul 20:56:04.064 # 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.
[6726] 14 Jul 20:56:04.064 * The server is now ready to accept connections on port 6379

我确实按照建议运行了命令sysctl vm.overcommit_memory=1并重新启动,但没有工作。我不知道该怎么做。有谁有主意吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-15 17:05:47

当您收到过度提交警告时,服务器已启动并运行。但是,当它将分叉另一个进程以保存数据库(RDB)或压缩AOF时,如果内存没有考虑到复制上写入开销,则可能会出现错误。

这就是为什么Redis坚持将过度提交模式设置为1。

现在,当您使用sysctl更改内核参数时,它们只在运行时被更改。由于机器已被重新启动,您刚刚丢失了此更改。如果希望该定义是永久的,还需要将其添加到文件/etc/sysctl.conf中。

请注意,除了过度提交内存问题之外,还存在文件描述符数量的问题。这可以通过调整/etc/security/Lims.conf文件(nofile参数)或在某些情况下调整会话的ulimit设置来增加。

票数 7
EN

Stack Overflow用户

发布于 2015-08-12 23:21:17

简单地做

代码语言:javascript
运行
复制
sudo echo 1 > /proc/sys/vm/overcommit_memory

它会解决你的错误。:)

背景保存失败了,即使我有大量的空闲RAM,Linux下也会出现叉()错误! 简短回答: echo 1> /proc/sys/vm/overcommit_memory :) 现在又长了一个: 在现代操作系统中,Redis后台保存模式依赖于叉的复制-写语义: Redis叉(创建子进程)是父进程的精确副本。子进程将DB转储到磁盘上,最后退出。从理论上讲,子进程应该使用与父进程相同的内存,但实际上,由于大多数现代操作系统实现的复制即写语义,父进程和子进程将共享公共内存页。只有当页在子页或父页中发生更改时,它才会被复制。从理论上讲,当子进程保存时,所有页面都可能发生变化,因此Linux无法预先知道子进程将占用多少内存,因此,如果overcommit_memory设置为零叉,那么除非有足够多的空闲RAM来真正复制所有父内存页,否则就会失败,结果是,如果您有一个3GB的Redis数据集和2GB的空闲内存,它就会失败。将overcommit_memory设置为1可以使Linux放松并以更乐观的分配方式执行分叉,这确实是您对Redis的要求。了解Linux以及overcommit_memory和overcommit_ratio的其他替代方案的一个很好的来源是红帽杂志“理解虚拟内存”中的经典。请注意,本文为overcommit_memory设置了1和2个配置值:请参阅proc(5)手册页,以获得可用值的正确含义。

来源:http://redis.io/topics/faq

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24748902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档