oom killer java,JAVA进程诡异消失,oom killer干的

在beta环境中,俩个项目经常性的崩溃。PS查看进程,JAVA进程消失。

先加Dump、ErrorFile查看,再次发生时,俩个日志均未输出。

尝试复现,有时发生,有时正常,很不规律。

在这过程中,top查看java进程,发现发生时,JAVA的内存会从50%一直飙升到95%,然后JAVA进程就消失了。

查看linux日志,/var/log/message 发现这么一段日志。

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: master invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: master cpuset=/ mems_allowed=0

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: Pid: 1287, comm: master Not tainted 2.6.32-358.23.2.el6.x86_64 #1

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: active_anon:338189 inactive_anon:123825 isolated_anon:0

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: active_file:4595 inactive_file:15377 isolated_file:0

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: unevictable:0 dirty:16077 writeback:0 unstable:0

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: free:13246 slab_reclaimable:2669 slab_unreclaimable:6168

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: mapped:3376 shmem:0 pagetables:1888 bounce:0

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: Node 0 DMA free:8316kB min:332kB low:412kB high:496kB active_anon:748kB inactive_anon:6672kB active_file:0kB inactive_file:0kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:15348kB mlocked:0kB dirty:0kB writeback:0kB mapped:0kB shmem:0kB slab_reclaimable:4kB slab_unreclaimable:0kB kernel_stack:0kB pagetables:0kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:32 all_unreclaimable? no

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: lowmem_reserve[]: 0 2004 2004 2004

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: Node 0 DMA32 free:44668kB min:44720kB low:55900kB high:67080kB active_anon:1352008kB inactive_anon:488628kB active_file:18380kB inactive_file:61508kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:2052308kB mlocked:0kB dirty:64308kB writeback:0kB mapped:13504kB shmem:0kB slab_reclaimable:10672kB slab_unreclaimable:24672kB kernel_stack:3352kB pagetables:7552kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:1559392 all_unreclaimable? no

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: lowmem_reserve[]: 0 0 0 0

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: Node 0 DMA: 3*4kB 2*8kB 2*16kB 2*32kB 12*64kB 6*128kB 8*256kB 1*512kB 2*1024kB 1*2048kB 0*4096kB = 8316kB

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: Node 0 DMA32: 813*4kB 465*8kB 308*16kB 216*32kB 132*64kB 52*128kB 12*256kB 11*512kB 2*1024kB 0*2048kB 0*4096kB = 44668kB

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: 34657 total pagecache pages

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: 14553 pages in swap cache

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: Swap cache stats: add 659065, delete 644512, find 159998/176201

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: Free swap = 4091960kB

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: Total swap = 4194296kB

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: 524284 pages RAM

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: 10683 pages reserved

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: 22147 pages shared

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: 475274 pages non-shared

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: Out of memory: Kill process 6728 (java) score 286 or sacrifice child

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: Killed process 6728, UID 40001, (java) total-vm:5041844kB, anon-rss:1773172kB, file-rss:11236kB

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: rsyslogd invoked oom-killer: gfp_mask=0x201da, order=0, oom_adj=0, oom_score_adj=0

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: rsyslogd cpuset=/ mems_allowed=0

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: Pid: 1158, comm: rsyslogd Not tainted 2.6.32-358.23.2.el6.x86_64 #1

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: active_anon:338189 inactive_anon:123825 isolated_anon:0

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: active_file:4595 inactive_file:15407 isolated_file:0

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: unevictable:0 dirty:16077 writeback:0 unstable:0

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: free:13246 slab_reclaimable:2669 slab_unreclaimable:6168

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: mapped:3376 shmem:0 pagetables:1888 bounce:0

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: Node 0 DMA free:8316kB min:332kB low:412kB high:496kB active_anon:748kB inactive_anon:6672kB active_file:0kB inactive_file:0kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:15348kB mlocked:0kB dirty:0kB writeback:0kB mapped:0kB shmem:0kB slab_reclaimable:4kB slab_unreclaimable:0kB kernel_stack:0kB pagetables:0kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:32 all_unreclaimable? no

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: lowmem_reserve[]: 0 2004 2004 2004

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: Node 0 DMA32 free:44668kB min:44720kB low:55900kB high:67080kB active_anon:1352008kB inactive_anon:488628kB active_file:18380kB inactive_file:61504kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:2052308kB mlocked:0kB dirty:64308kB writeback:0kB mapped:13504kB shmem:0kB slab_reclaimable:10672kB slab_unreclaimable:24672kB kernel_stack:3352kB pagetables:7552kB unstable:0kB bounce:0kB writeback_tmp:0kB pages_scanned:2114272 all_unreclaimable? no

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: lowmem_reserve[]: 0 0 0 0

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: Node 0 DMA: 3*4kB 2*8kB 2*16kB 2*32kB 12*64kB 6*128kB 8*256kB 1*512kB 2*1024kB 1*2048kB 0*4096kB = 8316kB

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: Node 0 DMA32: 813*4kB 465*8kB 308*16kB 216*32kB 132*64kB 52*128kB 12*256kB 11*512kB 2*1024kB 0*2048kB 0*4096kB = 44668kB

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: 34657 total pagecache pages

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: 14553 pages in swap cache

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: Swap cache stats: add 659065, delete 644512, find 159998/176201

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: Free swap = 4091960kB

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: Total swap = 4194296kB

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: 524284 pages RAM

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: 10683 pages reserved

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: 22179 pages shared

Mar 21 10:53:33 l-noahs687ktdv1.auto.beta.cn0 kernel: 475274 pages non-shared

这里我们可以看到,JAVA进程的确是被LINUX的oom killer干掉了。

oom killer是linux系统的一个保护进程,当linux系统所剩的内存空间不足以满足系统正常运行时,会触发。

oomkiller执行时,会找出系统所有线程的score值最高的那个pid,然后干掉。

这个score的值影响因素有很多,内存占用大小、运行时间、权重等。权重越高,分值越高,运行时间越短,分值越高,内存越大,分值越高。

我们这个JAVA进程,在第一次运行时,会加载某些内容到内存。所以系统运行时间短,内存占比高,权重值可以查看/proc//oom_score_adj,目前为0,所以分值最高了。

killer就把JAVA干掉了。当前的分值可以查看/proc//oom_score查看。

但是查看日志可以发现,系统仍然有大量的swap交换空间没有使用,为什么就直接触发oom了呢?

查看/proc/sys/vm/swapiness值为0。说明系统倾向于使用物理内存。但这个值是有倾向性的,并不是配置了0就不使用swap。

查资料发现在linux2.6.32-303.el6之后,这个含义就被干掉了。

This patch changes the behavior with swappiness==0.  If we set

swappiness==0, the kernel does not swap out completely (for global reclaim

until the amount of free pages and filebacked pages in a zone has been

reduced to something very very small (nr_free + nr_filebacked < high

watermark)).

就像这个patch写的,这个patch修改了swappiness=0的行为,如果你设置swappiness=0,那么只有在(nr_free + nr_filebacked < high watermark)才会交换内存,也就是说空闲内存和文件缓存基本没有了才会触发内存swap。

这样的话,副作用在于:内存如果不够了,Linux有可能触发OOM,从而kill掉耗费内存最多的JAVA进程。

现在明白了。那解决方法也就出来了。

1、调整JVM 最大内存,小于系统最大物理内存。(我是这么干的。之前的情况是系统是2G,最大内存配成2G出现问题。改成1G)。

2、新内核,设置vm.swappiness=1

3、关闭oomkiller。

4、降低进程oom_score_adj的权重。可以为负数-1000 ~ 1000。oom_adj是老的,即使更改了,内核算法也是正对oom_score_adj计算的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值