热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JAVA进程诡异消失,oomkiller干的

在beta环境中,俩个项目经常性的崩溃。PS查看进程,JAVA进程消失。先加Dump、ErrorFile查看,再次发生时,俩个日志均未输出。尝试复现,有时发生,有时正常,很不规律

在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
watermark)).
就像这个patch写的,这个patch修改了swappiness=0的行为,如果你设置swappiness=0,那么只有在(nr_free + nr_filebacked
这样的话,副作用在于:内存如果不够了,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计算的。





推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
  • Linux目录结构说明(2)一些重要文件目录1.一些重要文件目录参考1.一些重要文件目录1.网卡配置文件etcsysconfignetwork-scr ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 本文介绍了2020年计算机二级MSOffice的选择习题及答案,详细解析了操作系统的五大功能模块,包括处理器管理、作业管理、存储器管理、设备管理和文件管理。同时,还解答了算法的有穷性的含义。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
  • 与用户空间应用不同的是,内核不能调用标准C库或其它任何不属于内核的库。主要原因是,速度及大小的限制。标准C库对内核而言实在是太大了。许多常用的的libc ... [详细]
  • 【laravel5.6】yii  Process class relies on proc_open, which is not available on your PHP installation.
    部署服务器的时候,使用composer来安装依赖。遇到了从错误提示信息中可以看到是因为关闭了PHP的proc_get_status()函数,那么如何解决 ... [详细]
  • 我是这样学习Linux下C语言编程的-把程序输出信息加到系统日志里去关键词:Linux系统日志syslog服务程序syslogd ... [详细]
  • 示例代码packagemainimport("net""os"&am ... [详细]
author-avatar
莫念暧昧_zTq
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有