Nodemanager Out of heap memory[fix bug全过程]
问题:
自己写了一个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全过程]的更多相关文章
- java.util.jar.JarFile cause native heap memory leak
最近项目中使用了JarFile 这个类 来load jar包中的 configuration,大致的情况如下 public void processJarEntries(JarFile paramJa ...
- Java 堆内存与栈内存异同(Java Heap Memory vs Stack Memory Difference)
--reference Java Heap Memory vs Stack Memory Difference 在数据结构中,堆和栈可以说是两种最基础的数据结构,而Java中的栈内存空间和堆内存空间有 ...
- 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 ...
- hotspot的Heap Memory和Native Memory
JVM管理的内存可以总体划分为两部分:Heap Memory和Native Memory.前者供Java应用程序使用的:后者也称为C-Heap,是供JVM自身进程使用的.Native Memory没有 ...
- JVM Heap Memory和Native Memory
JVM管理的内存可以总体划分为两部分:Heap Memory和Native Memory.前者我们比较熟悉,是供Java应用程序使用的:后者也称为C-Heap,是供JVM自身进程使用的.Heap Me ...
- 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 ...
- 改bug后 fix bug 时,一个不错的修复描述模板
*问题原因:* 问题出现的原因.*解决方法:* 问题的解决方案.*影响分支:* 影响哪些分支. *相关修改:* 具体的修改文件列表.*自测结果:* 自行测试了哪些用例,将大概步骤描述出来. *影响功能 ...
- [FIX BUG]获取theme中自定义textColor时报的错误
我在Fragment中inflate它都可以,可是一旦使用ListView来inflate就会报错,说找不到我自定义的attr!研究了半天发现是我的inflate的context有问题: view = ...
- Two references point to the same heap memory
Phone类 package com.itheima_03; /* * 手机类 */ public class Phone { String brand; int price; String colo ...
随机推荐
- 关于JS事件的几点总结
1.理解事件(2点) 事件行为本身:没有给事件绑定方法事件也是一直存在的,当触发行为的时候,也对触发对应的行为,只不过由于没有绑定事件,导致没有任何事件发生: 事件绑定:给元素绑定一个方法:触发行为, ...
- RubyOnRails local_assigns
http://api.rubyonrails.org/classes/ActionView/Template.html#method-i-local_assigns Returns a hash wi ...
- git diff 生成patch, git apply patch 打补丁方法说明,以及分支管理的简单操作。
git diff 简易操作说明 先git log 查看commit ID, 记录你想要打的补丁的ID 比如说: git log commit 4ff35d800fa62123a28b7bda2a04e ...
- CentOS6.3 重启后/etc/resolv.conf 被还原解决办法(转)
今天一台服务器上不了网,设置了nameserver,重启后/etc/resolv.conf文件就被自动还原了,最后发现是被Network Manager修改了.解决方法:停止Network Manag ...
- Eclipse设置黑色主题
1点击help--->install new software 2输入 http://eclipse-color-theme.github.com/update 3下载安装eclipse col ...
- shiro session计算timeout
/** * Determines if this session is expired. * * @return true if the specified session has expired, ...
- html的a标签display:block之后文字竖直居中
设置行高和a标签的高度一样就能居中,使用line-height
- 461. Hamming Distance
https://leetcode.com/problems/hamming-distance/ 将两个二进制数比较,输出不同位数的个数 Input: x = 1, y = 4 Output: 2 Ex ...
- maven项目断点依赖maven插件
- DataGridView里CheckBox实现全选控制
1. checkbox点击事件 private void myStyleDataGridView1_CellClick(object sender, DataGridViewCellEventArgs ...