Out of memory: Kill process 错误分析

观察到服务器日志:

 

Jun 25 18:53:23 localhost kernel: Out of memory: Kill process 18971 (java) score 578 or sacrifice child
Jun 25 18:53:23 localhost kernel: Killed process 18971 (java), UID 500, total-vm:11106788kB, anon-rss:5251056kB, file-rss:0kB, shmem-rss:0kB

  背景知识:

overcommit:虚拟内存是在物理内存的基础上分配的,当分配了太多的虚拟内存时,会导致物理内存不足,这时就会发生Out of memory

默认 vm.overcommit_memory=0 在使用redis的时候,建议设置成1,目的是为了保证fork进程在低内存的情况下也可以正常运行

0,表示内核将检查是否有足够的可用内存。如果有足够的可用内存,内存申请通过,否则内存申请失败,并把错误返回给应用进程

1,表示内核允许超量使用内存直到用完为止

2,表示内核不过量的(“never overcommit”) 使用内存,即系统整个内存地址空间不能超过swap+50%的RAM值,50% 是overcommit ratio默认值,此参数同样支持修改;

查看系统配置

cat /proc/sys/vm/overcommit_memory
0
/etc/sysctl.conf  增加如下 vm.overcommit_memory=1
修改指定变量的值
sysctl vm.overcommit_memory=1
备注:sysctl命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录“/proc/sys”中。
 
posted @ 2023-07-25 14:55  春江潮水连海平  阅读(1252)  评论(0)    收藏  举报