前言:
如今小伙伴们对“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服务器很慢