问题:

自己写了一个yarn上的application,发现nodemanager过段时间,会out of memory退出,把nodemanager的heap memory从1G增大到2G也是无法避免NM程序OOM

开启NM的jmx监控

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port= -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

然后用jconsole连接,如下图所示

然后主要内存都在old gen里头占用,perform GC也是没有效果,说明内存都是在被引用着。

写了一个crontab半小时生成一份内存对象数据

*/ * * * * jmap -histo:live  > /home/yarn/log/`date`.log

对比发现主要的内存增长几乎都在[C这个类中,因为instances数目基本不增长,只是size增长,大概猜想是因为stringbuilder的不停append导致

:/home/yarn/log# diff Mon\ Aug\ \ \:\:\ PDT\ .log Mon\ Aug\ \ \:\:\ PDT\ .log
,10c4,
< : [C
< : <constMethodKlass>
< : <methodKlass>
< : <constantPoolKlass>
< : <instanceKlassKlass>
< : <constantPoolCacheKlass>
< : [B
---
> : [C
> : <constMethodKlass>
> : <methodKlass>
> : <constantPoolKlass>
> : <instanceKlassKlass>
> : <constantPoolCacheKlass>
> : [B

利用java工具

jmap -dump:live,format=b,file=xxx.xxx [pid]
jhat -J-Xmx1024M [file]

看到的东西也不够明了

最后打算用mat来图形化的分析下问题,https://eclipse.org/mat/

定位到shell.java的代码

原来nodemanager这边启动一个command之后,一直会记录标准错误输出到一个变量,这个变量在程序运行期间一直不会被释放,GC也无法回收空间,找到问题之后,解决办法就很简单了。启动一个命令的时候把标准输出和错误输出都定位到一个文件,不让nodemanager去接收即可。如下

    // Add log redirect params
vargs.add("1>>" + ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/"
+ VoidboxConfiguration.VOIDBOX_PROXY_LOG_FILENAME);
vargs.add("2>>" + ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/"
+ VoidboxConfiguration.VOIDBOX_PROXY_LOG_FILENAME);

不过这边NM这个潜在的bug还是需要fix的,不能因为程序的一些考虑不周到,而影响了自身的稳定。

建议可以对errMsg做rotate。

Nodemanager Out of heap memory[fix bug全过程]的更多相关文章

  1. java.util.jar.JarFile cause native heap memory leak

    最近项目中使用了JarFile 这个类 来load jar包中的 configuration,大致的情况如下 public void processJarEntries(JarFile paramJa ...

  2. Java 堆内存与栈内存异同(Java Heap Memory vs Stack Memory Difference)

    --reference Java Heap Memory vs Stack Memory Difference 在数据结构中,堆和栈可以说是两种最基础的数据结构,而Java中的栈内存空间和堆内存空间有 ...

  3. Find out your Java heap memory size

    In this article, we will show you how to use the -XX:+PrintFlagsFinal to find out your heap size det ...

  4. hotspot的Heap Memory和Native Memory

    JVM管理的内存可以总体划分为两部分:Heap Memory和Native Memory.前者供Java应用程序使用的:后者也称为C-Heap,是供JVM自身进程使用的.Native Memory没有 ...

  5. JVM Heap Memory和Native Memory

    JVM管理的内存可以总体划分为两部分:Heap Memory和Native Memory.前者我们比较熟悉,是供Java应用程序使用的:后者也称为C-Heap,是供JVM自身进程使用的.Heap Me ...

  6. how to fix bug in daily work

    0 QE will begin test the product when system is stable. so they may log a lot of issues, and our dai ...

  7. 改bug后 fix bug 时,一个不错的修复描述模板

    *问题原因:* 问题出现的原因.*解决方法:* 问题的解决方案.*影响分支:* 影响哪些分支. *相关修改:* 具体的修改文件列表.*自测结果:* 自行测试了哪些用例,将大概步骤描述出来. *影响功能 ...

  8. [FIX BUG]获取theme中自定义textColor时报的错误

    我在Fragment中inflate它都可以,可是一旦使用ListView来inflate就会报错,说找不到我自定义的attr!研究了半天发现是我的inflate的context有问题: view = ...

  9. Two references point to the same heap memory

    Phone类 package com.itheima_03; /* * 手机类 */ public class Phone { String brand; int price; String colo ...

随机推荐

  1. linux Mint 安装apache2

    sudo apt-get install apache2 y 启动apache2  /etc/init.d/apache2 restart 浏览器输入localhost看看是否访问正常 apache2 ...

  2. C#夯实基础之多线程一:初识多线程

    一. 烧水沏茶问题       在小学四年级有一个烧水沏茶问题,可以作为我们今天讨论话题的引子: 客人来了,要烧一壶茶,但是烧水需要5分钟,洗水壶需要1分钟,洗茶杯需要2分钟,接水需要1分钟,找茶叶需 ...

  3. css单位盘点

    css单位有:px,em,rem,vh,vw,vmin,vmax,ex,ch 等等 1.px单位最常见,也最直接,这里不做介绍. 2.em:em的值并不是固定,它继承父级元素的字体大小,所以层数越深字 ...

  4. IIS 配置MVC项目路由中以api结尾的接口

    公司的接口,前端框架是MVC,路由里面对接口配置的路径是以api结尾的,结果之间在iis上访问不了,研究了半天成功了,整理下,以免下次再忘. 路由配置RouteConfig routes.MapRou ...

  5. 网站底部版权信息区(bootstrap)

    bootstrap的强大功能毋庸置疑.所以,网站底部版权信息区可以用bootstrap的“栅格系统”完成. 下面是一个未经处理的底部版权信息区的样式: <div class="cont ...

  6. ffmpeg-20161104[07,10,16,21,22,27,30]-bin.7z

    ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 5 屏幕横向放大 20 像素 6 屏幕横向缩小 20 像素 S 下一帧 [ -2秒 ] +2 ...

  7. js最详细的基础,jquery 插件最全的教材

    一.Js的this,{},[] this是Javascript语言的一个关键字,随着函数使用场合的不同,this的值会发生变化.但是有一个总的原则,那就是this指的是调用的函数自己. { } 大括号 ...

  8. iOS之小门道道

    1.代理方法不执行 很多时候在你代理方法不执行时,小样,你看看你设置代理了吗?

  9. C++开始前篇,深入编译链接

    C++开始,为什么要写这个东西,因为按照课堂进度的话,现在的C++已经学到模板以及重载了,有时却仍然因为一些小问题无法解答,原因是忘记了开始时学到的知识,深知不能像猴子掰棒子一样,掰一个扔一个,因此, ...

  10. Tips标签显示

    浏览地址 http://www.7yusou.com 鱼搜官网 下载到本地