Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提高Redis设置的性能(设置vm.Overmit_memory=1后降级)_Redis_Linux Kernel - Fatal编程技术网

提高Redis设置的性能(设置vm.Overmit_memory=1后降级)

提高Redis设置的性能(设置vm.Overmit_memory=1后降级),redis,linux-kernel,Redis,Linux Kernel,需要一些帮助来诊断和调整我的Redis设置的性能(Ubuntu 14.04机器上的2个Redis服务器实例)。注意,写操作繁重的Django web应用程序与Redis共享VM。该机器有8个内核和25GB RAM 我最近发现,即使RAM没有耗尽,后台保存也会间歇性失败(出现fork()错误)。为了解决这个问题,我应用了设置vm.overmit\u memory=1(以前是default) 而且vm.swappiness=2,vm.overmit\u比率=50。我还通过echo-never>/sy

需要一些帮助来诊断和调整我的Redis设置的性能(Ubuntu 14.04机器上的2个Redis服务器实例)。注意,写操作繁重的Django web应用程序与Redis共享VM。该机器有8个内核和25GB RAM

我最近发现,即使RAM没有耗尽,后台保存也会间歇性失败(出现
fork()
错误)。为了解决这个问题,我应用了设置
vm.overmit\u memory=1
(以前是
default

而且
vm.swappiness=2
vm.overmit\u比率=50
。我还通过
echo-never>/sys/kernel/mm/transparent\u-hugepage/enabled
禁用了设置中的透明大页面(尽管尚未
echo-never>/sys/kernel/mm/transparent\u-hugepage/defrag

更改
overmit_memory
设置后,我注意到I/O利用率从13%上升到36%(平均)。每秒I/O操作数翻了一番,redis服务器CPU消耗量翻了一番多,内存消耗量增加了66%。因此,服务器响应时间大大增加。这就是在应用
vm后事情突然升级的方式。overmit\u memory=1

请注意,redis服务器是显示升级的唯一因素-gunicorn、nginx、芹菜等的性能与以前一样。此外,redis已经变得非常尖利

最后,NewRelic开始向我展示3个redis实例,而不是2个(最底部的图形)。我认为分叉的孩子算作第三名:

我的问题是:我如何在这里诊断和补救性能?作为服务器管理新手,我不确定如何继续。帮我弄清楚这里发生了什么,以及我如何解决它


free-m
具有以下输出(如果需要):


由于您的系统中没有启用交换(如果您有SSD,这可能值得重新考虑),(并且您的
swappiness
被设置为一个较低的值),您不能将其归咎于内存争用导致的交换增加

您可以在VFS缓存中缓存大约6GB的数据。在争用的情况下,这个缓存会耗尽进程工作内存,所以我相信可以肯定地说内存不是一个问题

这是瞎猜,但我猜您的redis服务器配置为“同步”/“保存”的频率太高(在redis配置文件“appendfsync”中搜索),并且通过删除内存分配限制,它现在实际上完成了它的工作:)

如果数据不是非常重要的,请将
appendfsync
设置为
never
,或者将
save
设置设置为减少保存频率


顺便说一句,关于redis&forked儿童,我相信你是正确的。

现场。我的两台redis服务器的rdb分别为~1GB和~4GB,保存设置是每60秒保存一次。分别改为5m和20m。可能会增加更多。顺便说一句,我的
vm.overmit\u比率设置为50。我读过,那是很低的;它至少应该是100。你有什么建议?或者这无关紧要?除非必要,否则我不会修改过度限制设置。如果我的回答对你有帮助,请接受:)是的,接受了!谢谢你的帮助。我一直在想为什么更改
vm.overmit_memory=1
会触发这个问题,因为我的
save
设置之前也是非常激进的。您是否认为
fork()
以前失败过?还是别的什么?我只是想了解一下我所经历的情况:-)过度分配内存基本上允许进程分配比系统实际可用内存更多的虚拟内存。虚拟内存不是真实的,它只是一个“野生”数字,旨在满足分配请求的需要。在争用时,要么进行交换,要么分配失败。通过允许您的进程过度提交,fork将停止并失败,
save
op实际上可能发生
             total       used       free     shared    buffers     cached
Mem:         28136      27912        224        576         68       6778
-/+ buffers/cache:      21064       7071
Swap:            0          0          0