MAP TASK内存泄露

简介:

这几天于遇到一个略诡异的CASE:线上报警一个MR Job的一个MAP TASK使用的物理内存过大,仔细一看超过了Xmx=1.3GB,而物理内存消耗到1.7GB,第一反应是不是遇到JVM内存泄露了.先对MAP TASK做个dump分析:

024910615.png

发现实际JVM使用不到300MB,算上PermMaxPermSize=128MB),那其余的1.XGB的内存是哪里来的呢?想到了non-heap memoryleak,常见的主要几种:JNINIO,ZIPAWT,查看MAP日志发现处理大量的GZIP文件是不是可能由于这个导致的呢,由于MAP启动具有一定的随机性,常见的non-heap 分析工具可能比较困难,不过先Google了一下果然有所发现:http://code.google.com/p/bigstreams/issues/detail?id=30

Hadoop native gzip存在内存泄露!解决的办法就是用Javabuiltin GZIP或者其他压缩格式.线上是并用GZIPSNAPPY的,历史的GZIP还没有转到SNAPPY,看来有活干了...BTW,对于Sqoop的导入Job默认是gzip的,可以通过

--compression-codec org.apache.hadoop.io.compress.SnappyCodec来改变,同时最好结合--as-sequencefile




另外一个问题就是线上的内存使用率太低,因为io.sort.mb设置了256MB,怪不得JVM的old generation(主要就是mapoutput buffer)只用到了25%左右...因此这里的引出另外一个best practise是将io.sort.mb设置接近Xmx


最后,针对内存限制在HADOOP-0.20.0/1分别提出了几个参数来限制TASK的虚拟内存和物理内存的大小:HADOOP-5883:https://issues.apache.org/jira/browse/HADOOP-5883,MAPREDUCE-1221:https://issues.apache.org/jira/browse/HADOOP-5883 .


Have fun.



本文转自MIKE老毕 51CTO博客,原文链接:http://blog.51cto.com/boylook/1323554,如需转载请自行联系原作者



相关文章
|
6月前
|
存储 JavaScript 算法
|
9月前
|
Java
SpringBoot 项目启动初始化一个Map对象到内存
SpringBoot 项目启动初始化一个Map对象到内存
176 1
|
存储 Go
当map在不提前分配内存的时候为什么会抛异常?
当map在不提前分配内存的时候为什么会抛异常?
|
存储 程序员 编译器
STM32的内存管理相关(内存架构,内存管理,map文件分析)
STM32 的内存架构,内存管理以及 map 文件分析
382 0
STM32的内存管理相关(内存架构,内存管理,map文件分析)
|
存储 SQL 关系型数据库
sqoop关系型数据迁移原理以及map端内存为何不会爆掉窥探
  序:map客户端使用jdbc向数据库发送查询语句,将会拿到所有数据到map的客户端,安装jdbc的原理,数据全部缓存在内存中,但是内存没有出现爆掉情况,这是因为1.3以后,对jdbc进行了优化,改进jdbc内部原理,将数据写入磁盘存储了。
1842 0
|
存储 分布式计算
MapReduce源码分析之Task中关于对应TaskAttempt存储Map方案的一些思考
        我们知道,MapReduce有三层调度模型,即Job——>Task——>TaskAttempt,并且:         1、通常一个Job存在多个Task,这些Task总共有Map Task和Redcue Task两种大的类型(为简化描述,Map-Only作业、JobSetup Task等复杂的情况这里不做考虑);         2、每个Task可以尝试运行1-n此,而且通常很多情况下都是1次,只有当开启了推测执行原理且存在拖后腿Task,或者Task之前执行失败时,Task才执行多次。
1175 0
|
C++
map的erase()释放内存
STL中的map调用erase(it),当value值为指针时,释放内存: 1 #include 2 #include 3 #include 4 5 using namespace std; 6 struct value{ 7 int i; 8 ...
2578 0
|
5月前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
5月前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
6月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set