排查-文件热读 DN 问题

115 阅读1分钟

问题排查

1.业务 job 反馈延迟,去 yarn web 页面查看 job 详情,找到慢 task 机器,查看主机监控,发现有些机器的出吞吐量被打高。

2.因为机器上混跑,job 较多,也未发现某个出 ip 的流量巨大的情况,流量相对比较分散.

3.从 YARN 上摘掉其中一个有问题的 DN,再次观察,未恢复。问题大概率是在 DN 上

4.分析 DN 的 jstack 日志, grep DataXceiver.readBlock jstack.txt | wc -l 发现有 2K+ 个读 blk 操作,很少的写操作。

5.lsof 查看 DN 打开的文件,统计后分析,发现某几个 blk 高频出现,非常怀疑是被热读了。

6.通过 blkid 查找对应的 HDFS path,再通过 path 定位到访问账号。

7.去 yarn web 页面查找对应该 HDFS 账号的任务,最终定位到了几个 job,联系业务,先 kill 掉 job,查看监控,问题恢复

8.分析业务代码,定位到了 kylin 的这一处逻辑。大体意思是内存不够的时候,就evict 掉,然后下次算的时候,若 key 不存在,就从全局字典 load。频繁的 swap 导致频繁的 load,每次 load 都会到 hdfs 上读文件,造成了热读。