开机报错:Kernel panic - not syscing : Out of memory and no killable processes

昨天一台机器被重启后没办法启动,报以下错误:

 

 

  看这个以为原先虚拟机内存太小了,需要调大一些,但是设置了原先的2倍也没办法启动,感觉应该像是内核参数可能被调整错误了。 故进入救援模式查看原有系统中 /etc/sysctl.conf文件配置信息,果然 vm.min_free_kbytes值设置的超级大,达到了2T的内存大小。故修改器中为2G大小,之后就可以正常开机了。

 

宕机原因:vm.min_free_kbytes 设定值高于 LowTotal 值,系统认为没有足够的lowmem,而触发OOM Killer,将进程强行杀掉

 具体分析:

  系统中内存分为 lowmem和highmem,其中 lowmem为寻址内存,当lowmem耗尽时,系统会触发OOM Killer将多余进程杀掉来释放内存(2.6内核会杀掉占用内存最高的进程)

 其中,64位系统会将所有内存大小都划分到 lowmem中,防止lowmem不够用,而32位系统时分开的,上限为896M左右,具体可通过 egrep 'High|Low' /proc/meminfo 命令查看。

   如果键vm.min_free_kbytes 的值设定大于LowTotal的值,则系统会认为当前没有足够的内存来触发OOM Killer,直至将所有进程杀掉,重启无法启动也是因为当启动时刚启动一个进程,系统就认为内存不足而将其杀掉,导致无法启动。

   在32位的linux里,系统认为lowmem就是当前内存的大小,只要lowmem不够用就认为内存不够用了,就开始杀进程来释放,设定vm.min_free_kbytes也就让系统空闲出多少lowmem,所以设定值超出lowmem会出现异常。

  

 

posted on 2020-09-18 09:24  Binggo30  阅读(977)  评论(0编辑  收藏  举报

导航