这篇文章给大家分享的是有关怎么解决redis连接超时问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

问题描述:

redis连接超时,然后定位到redis配置文件目录被删除,接着尝试重启redis,发现连接中断,未启动成功。

报错:

查看redis的输出日志。出现下图所示的报错:

根据提示在/etc/sysctl.conf文件中添加vm.overcommit_memory = 1,

修改其大透明页,并将调整redis的timeout从300到500重启正常;

echonever>/sys/kernel/mm/transparent_hugepage/enabled

关于vm.overcommit_memory

它是内存分配策略可选值:0、1、2。0,表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。1,表示内核允许分配所有的物理内存,而不管当前的内存状态如何。2,表示内核允许分配超过所有物理内存和交换空间总和的内存

关于Overcommit和OOM

Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。这种技术叫做Overcommit。当linux发现内存不足时,会发生OOMkiller(OOM=out-of-memory)。它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存。当oom-killer发生时,linux会选择杀死哪些进程?选择进程的函数是oom_badness函数(在mm/oom_kill.c中),该函数会计算每个进程的点数(0~1000)。点数越高,这个进程越有可能被杀死。每个进程的点数跟oom_score_adj有关,而且oom_score_adj可以被设置(-1000最低,1000最高)。

关于/sys/kernel/mm/transparent_hugepage/enabled

透明大页介绍TransparentHugePages的一些官方介绍资料:TransparentHugePages(THP)areenabledbydefaultinRHEL6forallapplications.ThekernelattemptstoallocatehugepageswheneverpossibleandanyLinuxprocesswillreceive2MBpagesifthemmapregionis2MBnaturallyaligned.Themainkerneladdressspaceitselfismappedwithhugepages,reducingTLBpressurefromkernelcode.ForgeneralinformationonHugepages,see:WhatareHugePagesandwhataretheadvantagesofusingthem?Thekernelwillalwaysattempttosatisfyamemoryallocationusinghugepages.Ifnohugepagesareavailable(duetononavailabilityofphysicallycontinuousmemoryforexample)thekernelwillfallbacktotheregular4KBpages.THParealsoswappable(unlikehugetlbfs).Thisisachievedbybreakingthehugepagetosmaller4KBpages,whicharethenswappedoutnormally.Buttousehugepageseffectively,thekernelmustfindphysicallycontinuousareasofmemorybigenoughtosatisfytherequest,andalsoproperlyaligned.Forthis,akhugepagedkernelthreadhasbeenadded.Thisthreadwilloccasionallyattempttosubstitutesmallerpagesbeingusedcurrentlywithahugepageallocation,thusmaximizingTHPusage.Inuserland,nomodificationstotheapplicationsarenecessary(hencetransparent).Buttherearewaystooptimizeitsuse.Forapplicationsthatwanttousehugepages,useofposix_memalign()canalsohelpensurethatlargeallocationsarealignedtohugepage(2MB)boundaries.Also,THPisonlyenabledforanonymousmemoryregions.Thereareplanstoaddsupportfortmpfsandpagecache.THPtunablesarefoundinthe/systreeunder/sys/kernel/mm/redhat_transparent_hugepage.

查看是否启用透明大页

cat/sys/kernel/mm/transparent_hugepage/enabled[always]madvisenever使用命令查看时,如果输出结果为[always]表示透明大页启用了。[never]表示透明大页禁用、[madvise]表示(只在MADV_HUGEPAGE标志的VMA中使用THP如何HugePages_Total返回0,也意味着标准大页禁用了(注意传统/标准大页和透明大页的区别)透明大页(THP)管理和标准/传统大页(HP)管理都是操作系统为了减少页表转换消耗的资源而发布的新特性,虽然ORACLE建议利用大页机制来提高数据库的性能,但是ORACLE却同时建议关闭透明大页管理。这二者的区别在于大页的分配机制,标准大页管理是预分配的方式,而透明大页管理则是动态分配的方式。[root@appnode001~]#grep-iHugePages_Total/proc/meminfoHugePages_Total:0cat/proc/sys/vm/nr_hugepages返回0也意味着传统大页禁用了(传统大页和透明大页)。[root@appnode001~]#cat/proc/sys/vm/nr_hugepages0

感谢各位的阅读!关于“怎么解决redis连接超时问题”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!