问题:

自己写了一个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. Maven生命周期小记

    1.Maven生命周期是为了所有的构建过程进行抽象和统一.Maven从大量的项目和构建工具中学习和反思,总结了一套高度完善.易扩展的生命周期.这个生命周期包含了项目的清理.初始化.编译.测试.打包.集 ...

  2. Latex使用整理

    \section{software academy}(标题) \subsection{software enginner} (小标题) \subsection{computer science} \s ...

  3. iOS如何彻底避免数组越界

    我们先来看看有可能会出现的数组越界Crash的地方: ? 1 2 3 4 5 6 7 - (void)tableView:(UITableView *)tableView didSelectRowAt ...

  4. 手机设计尺寸 - iPhone界面尺寸

    参考网址: http://www.qijishow.com/down/app-index.htm iPhone界面尺寸 设备 分辨率 PPI 状态栏高度 导航栏高度 标签栏高度 iPhone6 plu ...

  5. TransmitFile函数的简单使用

    简述 TransmitFile是一个扩展的 API,它允许在套接字连接上发送一个打开的文件.这使得应用程序可以避免亲自打开文件,重复地在文件执行读入操作,再将读入的那块数据写入套接字.相反,已打开的文 ...

  6. 将页面转化为pdf的实现方法

    1.实现代码把html转化为pdf主要是使用wkhtmltopdf.exe工具生成,在获取转化的地址,创建一个进程,把地址传递到进程参数中进行调用wkhtmltopdf.exe工具打印 2.代码片段/ ...

  7. 循环冗余码crc

    待编码的有效信息组多项式:M(x) 生成多项式(产生校验码的多项式):G(x) 余数多项式:R(x) 商:Q(x) 生成多项式是四次的,所以某个多项式除以生成多项式的余式肯定是三次的,所以要加四位00 ...

  8. js数组的sort排序详解

    <body> <div> sort()对数组排序,不开辟新的内存,对原有数组元素进行调换 </div> <div id="showBox" ...

  9. WPF中运行时使内容可以上下左右被鼠标拖动应该怎么做?

    <Window x:Class="testGridSplitter.MainWindow" xmlns="http://schemas.microsoft.com/ ...

  10. iOS之滑动隐藏导航

    滑动隐藏导航狼栏 -(void)scrollViewDidScroll:(UIScrollView *)scrollView{ CGFloat offsetY = scrollView.content ...