都说spark那么牛,有没有啥坑啊( 三 )



为什么会有这些对象在里面,我们看下源码
都说spark那么牛,有没有啥坑啊

都说spark那么牛,有没有啥坑啊

8.JDO内存泄露
多达10万多个JDOPersistenceManage
都说spark那么牛,有没有啥坑啊

都说spark那么牛,有没有啥坑啊

都说spark那么牛,有没有啥坑啊

【都说spark那么牛,有没有啥坑啊】 都说spark那么牛,有没有啥坑啊

9.listerner内存泄露
通过debug工具监控发现,spark的listerner随着时间的积累,通知(post)速度运来越慢
发现所有代码都卡在了onpostevent上
都说spark那么牛,有没有啥坑啊

jstack的结果如下
都说spark那么牛,有没有啥坑啊

研究下了调用逻辑如下,发现是循环调用listerners,而且listerner都是空执行才会产生上面的jstack截图
都说spark那么牛,有没有啥坑啊

通过内存发现有30多万个linterner在里面
都说spark那么牛,有没有啥坑啊

发现都是大多数都是同一个listener,我们核对下该处源码
都说spark那么牛,有没有啥坑啊

最终定位问题
确系是这个地方的BUG ,每次创建JDBC连接的时候 ,spark就会增加一个listener, 时间久了,listener就会积累越来越多 针对这个问题 我简单的修改了一行代码,开始进入下一轮的压测
都说spark那么牛,有没有啥坑啊

二十二、spark源码调优测试发现,即使只有1条记录,使用 spark进行一次SQL查询也会耗时1秒,对很多即席查询来说1秒的等待,对用户体验非常不友好。针对这个问题,我们在spark与hive的细节代码上进行了局部调优,调优后,响应时间由原先的1秒缩减到现在的200~300毫秒。
以下是我们改动过的地方
1.SessionState 的创建目录 占用较多的时间
都说spark那么牛,有没有啥坑啊

另外使用Hadoop namenode HA的同学会注意到,如果第一个namenode是standby状态,这个地方会更慢,就不止一秒,所以除了改动源码外,如果使用namenode ha的同学一定要注意,将active状态的node一定要放在前面。


推荐阅读