龙空技术网

生产环境YARN TimeLineServer反应慢问题解决

高清码农 141

前言:

如今小伙伴们对“apache服务器很慢”大体比较注意,我们都想要分析一些“apache服务器很慢”的相关知识。那么小编也在网摘上收集了一些关于“apache服务器很慢””的相关内容,希望看官们能喜欢,小伙伴们一起来学习一下吧!

环境现象

腾讯云环境,硬件配置很好,磁盘读写速度大于1G/s,内存125G,CPU 48核。

hadoop代码是我们改过的,主要改动集中在认证功能。

系统负载很低,cpu利用率2%以下。磁盘读写忽略,网络更不用说。

但是请求:curl -i 需要120秒才能返回

分析

分析看gc:每秒至少5次以上minor gc,但是gc累计时间却很少。而新生代survivor区也有几十兆。

由此判定,代码肯定是在疯狂滴创建临时对象,而且native代码应该占用不了多少时间,因为若是native代码是不会产生频繁gc的。

简单说结论就是,代码一直在跑,只是做了无用功;因为正常情况肯定不需要那么长时间

定位过程

所以可以用火焰图看看到底是哪些代码块在耗时间。

生成火焰图需要两步:

1.收集on-cpu的stack trace,采用lightweight-java-profiler

2.转换trace数据为火焰图

lightweight-java-profiler使用:

1)下载

git clone

2)编译

make all

3)启动timelineserver,加上额外参数

/usr/jdk64/jdk1.8.0_111/bin/java -Dproc_timelineserver -Xmx4096m -Dhdp.version=2.2.0.0-2041 -Dhadoop.log.dir=/data/var/log/hadoop-yarn/yarn -Dyarn.log.dir=/data/var/log/hadoop-yarn/yarn -Dhadoop.root.logger=INFO,RFA -Dyarn.root.logger=INFO,RFA -Djava.library.path=:/lib/native/Linux-amd64-64:/data/bigdata/tbds/usr/hdp/2.2.0.0-2041/hadoop/lib/native:/usr/hdp/current/hadoop-client/lib/native/Linux-amd64-64:/data/bigdata/tbds/usr/hdp/2.2.0.0-2041/hadoop/lib/native -classpath XXXX -agentpath:/tmp/test_zx/lightweight-java-profiler/build-64/liblagent.so org.apache.hadoop.yarn.server.applicationhistoryservice.ApplicationHistoryServer

4)ctrl+c停止timelineserver

结束后,可以在当前目录获取到traces.txt

生成火焰图

1)下载并使用就可完成

git clone

cd FlameGraph

./stackcollapse-ljp.awk < ../traces.txt | ./flamegraph.pl > ../traces.svg

2)用iE打开traces.svg

火焰图

问题解决

通过观察最后的火焰图,可以看到代码基本上在不停的new Configuration对象,而每次new对象的时候需要加载几个配置文件。

为什么会不停的new Configuration对象呢?原来是timeLineserver需要给前台返回10000+的Application信息,在后台构造

Application对象的时候new Configuration。

最后解决:修改Configuration代码,取消在Configuration构造函数中的loadTbdsAuthParams,从而不会加载配置文件。

这样从2分钟+的响应时间变成了1秒。

参考:

标签: #apache服务器很慢