SlideShare une entreprise Scribd logo
1  sur  25
Télécharger pour lire hors ligne
⼀一次集群问题的解决
JT Memory Leak发现及解决过程
⺫⽬目录
• ⼀一、问题现象
• ⼆二、调查过程
• 三、产⽣生原因
• 四、解决⽅方案
⼀一、问题现象
⼀一、问题现象
⼀一、问题现象
⼀一、问题现象
• What is the problems?
1、thousands of threads lead to too much Context
Switching degrades performance
2、too much memory consumption lead to GC
stop the world
⼆二、调查过程
!
!
!
• One instance of Filesystem has one DFSClient
• One DFSClient has one thread of LeaseChecker
DFSClient
FileSystem
LeaseChecker
DFSClient
NameNode
Renew Lease
Thread
⼆二、调查过程
• 可能的问题:FileSystem close,但是DFSClient没有
close,可能性低。
• 可能的问题:FileSystem没有close导致DFSClient没
有close,从⽽而有⼤大量的LeaseChecker,可能性⾼高。
• 曾经的问题:Scribe java版本中代码bug导致⽂文件⻓长
时间⽆无法close,甚⾄至⽆无法recovery
⼆二、调查过程
• 社区jira:https://issues.apache.org/jira/browse/
HADOOP
• 相关的jira(但与我们不同):MAPREDUCE-
5508,MAPREDUCE-5351
⼆二、调查过程
!
!
• Ebay的经验
• email后得到猜测的结果
⼆二、调查过程
• 结论:FileSystem没有Close,造成JobTracker
memory leaks
三、产⽣生原因
• Job提交流程
三、产⽣生原因
!
!
• JobInProgress init ⽣生成FileSystem object
!
• JobHistory获得FileSystem object
三、产⽣生原因
• FileSystem都采⽤用缓存
• Key是由scheme+authority+ugi+unique决定
三、产⽣生原因
• ⽤用户conf没有定义schema,那么获得的FileSystem
就是JIP初始化时候的FS,close会全部close掉
• 如果⽤用户⾃自定义conf,并且scema不同,那么获得
History FS将与JIP初始化FS不同,并且没有close⽅方
法,造成泄漏
四、解决⽅方法
• 1、重启JobTracker:影响⾯面较⼤大
• 2、动态更改runtime bytecode
四、解决⽅方法
• BTrace?
四、解决⽅方法
• JVM Instrumentation: introduced in jdk 1.5
• statically & dynamically load byte code at runtime
• ⽆无限可能(⻛风险)
• usage: profile tools , monitor tools
四、解决⽅方法
• lifecycle of java-agent
• Premain
• Main
• AgentMain
!
四、解决⽅方法
• load过程
四、解决⽅方法
• Using JVM Instrumentation
• 1、create agent: jar , Manifest
(1)command line:javaagent:jarpath[=options]
(2)attach to an existing jvm
• 2、ClassLoader load agent
四、解决⽅方法
四、解决⽅方法
• Instrumentation把实现交给了⽤用户
!
!
!
!
example:http://blog.javabenchmark.org/2013/05/java-
instrumentation-tutorial.html
bytecode manipulation tools:ASM, javassist
四、解决⽅方法
• 我们的解决⽅方法:
1、通过agent 把代码inject到JobTracker中
2、代码⾸首先通过反射获得所有的Cache中的
DistributedFileSystem实例(包括正常的和泄漏的)
3、加锁,通过DFS的conf获得JobID对象,对应了正在执⾏行
的Job
4、反查JT中Map<JobID, JobInProgress> jobs
5、release leak filesystem
refrence
• http://dhruba.name/2010/02/07/creation-dynamic-
loading-and-instrumentation-with-javaagents/
• http://dhruba.name/2010/02/07/creation-dynamic-
loading-and-instrumentation-with-javaagents/
• http://blog.javabenchmark.org/2013/05/java-
instrumentation-tutorial.html
• 代码及详细说明:https://svn.intra.sina.com.cn/
data/DGM/docs/ProblemsSummary/hadoop

Contenu connexe

Similaire à JobTracker Memory Leak Solution

分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列XiaoJun Hong
 
出了问题不要靠猜
出了问题不要靠猜出了问题不要靠猜
出了问题不要靠猜LI Daobing
 
淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践丁 宇
 
Sun jdk 1.6内存管理 -使用篇-毕玄
Sun jdk 1.6内存管理 -使用篇-毕玄Sun jdk 1.6内存管理 -使用篇-毕玄
Sun jdk 1.6内存管理 -使用篇-毕玄锐 张
 
寫出高性能的服務與應用 那些你沒想過的事
寫出高性能的服務與應用 那些你沒想過的事寫出高性能的服務與應用 那些你沒想過的事
寫出高性能的服務與應用 那些你沒想過的事Chieh (Jack) Yu
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现orczhou
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0jinqing zhu
 
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁reinhardx
 
Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)wang hongjiang
 
Jvm状态监控与oom案例分析
Jvm状态监控与oom案例分析Jvm状态监控与oom案例分析
Jvm状态监控与oom案例分析beiyu95
 
大型网站架构的发展
大型网站架构的发展大型网站架构的发展
大型网站架构的发展drewz lin
 
大型网站架构的发展
大型网站架构的发展大型网站架构的发展
大型网站架构的发展Hesey
 
淘宝主备数据库自动切换
淘宝主备数据库自动切换淘宝主备数据库自动切换
淘宝主备数据库自动切换mysqlops
 
Modern Web Development Introduction
Modern Web Development IntroductionModern Web Development Introduction
Modern Web Development IntroductionJohn Chou
 
Linux I/O Scheduler
Linux I/O SchedulerLinux I/O Scheduler
Linux I/O SchedulerHesey
 
优酷 Web网站架构案例分析
优酷   Web网站架构案例分析优酷   Web网站架构案例分析
优酷 Web网站架构案例分析George Ang
 
Key value store
Key value storeKey value store
Key value storexuanhan863
 
Youku arch qcon2009_beijing
Youku arch qcon2009_beijingYouku arch qcon2009_beijing
Youku arch qcon2009_beijingdrewz lin
 
PHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits LevelPHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits LevelHo Kim
 

Similaire à JobTracker Memory Leak Solution (20)

Linux File system
Linux File systemLinux File system
Linux File system
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列
 
出了问题不要靠猜
出了问题不要靠猜出了问题不要靠猜
出了问题不要靠猜
 
淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践
 
Sun jdk 1.6内存管理 -使用篇-毕玄
Sun jdk 1.6内存管理 -使用篇-毕玄Sun jdk 1.6内存管理 -使用篇-毕玄
Sun jdk 1.6内存管理 -使用篇-毕玄
 
寫出高性能的服務與應用 那些你沒想過的事
寫出高性能的服務與應用 那些你沒想過的事寫出高性能的服務與應用 那些你沒想過的事
寫出高性能的服務與應用 那些你沒想過的事
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0
 
豆瓣网技术架构变迁
豆瓣网技术架构变迁豆瓣网技术架构变迁
豆瓣网技术架构变迁
 
Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)Effective linux.3.(diagnosis)
Effective linux.3.(diagnosis)
 
Jvm状态监控与oom案例分析
Jvm状态监控与oom案例分析Jvm状态监控与oom案例分析
Jvm状态监控与oom案例分析
 
大型网站架构的发展
大型网站架构的发展大型网站架构的发展
大型网站架构的发展
 
大型网站架构的发展
大型网站架构的发展大型网站架构的发展
大型网站架构的发展
 
淘宝主备数据库自动切换
淘宝主备数据库自动切换淘宝主备数据库自动切换
淘宝主备数据库自动切换
 
Modern Web Development Introduction
Modern Web Development IntroductionModern Web Development Introduction
Modern Web Development Introduction
 
Linux I/O Scheduler
Linux I/O SchedulerLinux I/O Scheduler
Linux I/O Scheduler
 
优酷 Web网站架构案例分析
优酷   Web网站架构案例分析优酷   Web网站架构案例分析
优酷 Web网站架构案例分析
 
Key value store
Key value storeKey value store
Key value store
 
Youku arch qcon2009_beijing
Youku arch qcon2009_beijingYouku arch qcon2009_beijing
Youku arch qcon2009_beijing
 
PHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits LevelPHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits Level
 

JobTracker Memory Leak Solution