Dubbo服务启动慢问题排查与解决:优化DNS配置提升性能

创始人
2024-12-16 23:07:38
0 次浏览
0 评论

What?一个Dubbo服务启动要两个小时!

在前导码测试环境中;我遇到了一个问题,Dubbo服务启动异常。
过程显示,应用首次启动时速度非常慢,大约需要两个小时才能正常运行。
测试人员数据库;尝试解决Zookeeper的其他连接问题,但找不到原因。
最后,通过jstack工具获取线程快照后;具体来说,ServiceConfig.java中的303行代码发现Dubbo服务配置以某种方式卡在了主线程中。
根据源码分析进行深入分析;问题的根本原因是试图获取本地IP并注册到Zookeeper进行服务调用。
当执行Inet4AddressImpl.getLocalHostName方法时;这是默认方法,并且发现调用花费了异常长的时间。
经过测试,我们发现本地主机名与IP的交互过程存在滞后,与DNS服务器的交互速度明显变慢。
解决了策略分析问题后,考虑到这是一个原生方法,与核心应用逻辑无关。
很难确定问题是否源于服务器配置。
通过ping服务器的主机名和IP;获取主机名存在延迟;导致整个系统启动缓慢。
为了解决这个问题,我尝试在/etc/hosts配置文件中添加主机名和IP之间的映射;从而直接ping主机名响应速度快,解决了Dubbo服务启动慢的问题。
总结与反思解决这个问题后,我们总结了以下几个要点:第一,DNS服务器的交互速度对应用程序的启动时间影响很大,应关注其响应速度。
第二,Dubbo在依赖外包时应该提高其健壮性。
例如,当资源长时间不可用时;您可以提供异常或者更清晰的错误信息,帮助开发者快速发现问题。
通过这次经验我们认识到,优化DNS配置、提高外部依赖处理逻辑的性能对于提高系统稳定性至关重要。

zookeeper事务日志在哪儿

准备工作1、每台机器都要配置vim/etc/sysconfig/networkNETWORKING=yesHOSTNAME=hadoop-server。
12.更改IP/etc/sysconfig/network-scripts/ifcfg-eth03。
主机名和IP之间vim/etc/hosts192.168.146.181hadoop-server1192.168.146.182hadoop服务器2192.168.146.183hadoop服务器3192.168.146.184hadoop服务器4192.168.146.185hadoop-server5######注意######如果你的公司租用服务器或者使用云主机(华为主机、阿里云主机等),那么/etc/hosts中做什么呢?您的内网IP地址和主机名。
映射关系4.关闭防火墙#显示防火墙状态serviceiptablesstatus#关闭防火墙serviceiptablesstop#显示防火墙启动状态chkconfigiptables--list#关闭防火墙启动chkconfigiptablesoff前四步使用root用户,然后重启机器。
操作5.ssh不需要登录hadoop生成两个文件:id_rsa.pub(密钥)和id_rsa.pub(公钥)。
将公钥复制到您要记录的目标。
在您的计算机上运行ssh-copy-。
idhadoop-server26.安装JDK、配置环境变量等root用户操作vim/etc/proflieexportJAVA_HOME=/usr/java/jdk1.7.0_65exportHADOOP_HOME=/itcast/hadoop-2.4.1exportPATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbinsource/etc/profile集群规划:主机名IP安装软件运行进程hadoop-server1192.168.146.181:jdk,hadoop名称节点资源manageDFSZKFailoverController(zkfc)hadoop-server2192.168.146.182:jdk,hadoopnamenoderesourcemanageDFSZKFailoverController(zkfc)hadoop-server3192.168.146.183:jdk,hadoop,zookeeperdatanodenodemanagejournalnodeQuorumPeerMainhadoop-server4192.168.146.184:jdk,hadoop,zookeeperdatanodenodemanagejournalnodeQuorumPeerMainhadoop-server5192.168.146.185:jdk,hadoop,zookeeperdatanodenodemanagejournalnodeQuorumPeerMain安装说明:1、安装并配置zookeeper集群(在hadoop-server3上)1.1tar-zxvfzookeeper-3.4.5.tar.gz-C/home/hadoop/app/1.2修改配置cd/home/hadoop/app/zookeeper-3.4.5/conf/cpzoo_sample.cfgzoo.cfgvimzoo。
cfg更改:dataDir=/home/hadoop/app/zookeeper-3.4.5/data最后添加:server.1=hadoop-server3:2888:3888server.2=hadoop-server4:2888:3888server.3=hadoop-server5:2888:3888保存退出并创建tmp文件夹mkdir/home/hadoop/a。
pp/zookeeper-3.4.5/data创建一个空文件touch/home/hadoop/app/zookeeper-3.4.5/data/myid,最后创建IDecho1>/home/hadoop/app/zookeeper-3.4作为文件写入。
/data/myid1.3将配置好的Zookeeper复制到其他节点scp-r/home/hadoop/app/zookeeper-3.4.5/weekend06:/home/hadoop/app/scp-r/home/hadoop/app/zookeeper-3.4.5/weekend07:/home/hadoop/app/注意:hadoop-server4、hadoop-server5更改/home/hadoop/app/zookeeper-3.4.5/data/myid内容对应的部分hadoop-server4:echo2>/home/hadoop/app/zookeeper-3.4.5/data/myidhadoop-server5:echo3>/home/hadoop/app/zookeeper-3.4.5/data/myid2(在Hadoop中)安装并配置Hadoop集群。
-server1(如上操作)2.1解压tar-zxvfhadoop-2.4.1.tar.gz-C/weekend/2.2。
配置HDFS(hadoop2.0的所有配置文件位于$HADOOP_HOME/etc/hadoop在环境变量中添加#hadoopvim/etc/profileexportJAVA_HOME=/hadoop/home/app/jdk1.7.0_55exportHADOOP_HOME=/home/hadoop/app/hadoop-2.4.1exportPATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin#hadoop2.0所有配置文件都是位于$HADOOP_HOME/etc/hadoopcd/home/hadoop/app/hadoop-2.4.1/etc/hadoop2.2.1更改hadoo-env.shexportJAVA_HOME=/home/hadoop/app/jdk1.7.0_552.2.2更改核心-site.xml<配置><!--hdfs名称服务指定为ns1-->fs.defaultFShdfs://ns1/<!--指定hadoop临时目录--><名称>hadoop.tmp.dir</名称><值>/home/hadoop/app/hadoop-2.4.1/tmp<!--指定Zookeeper地址-->ha.zookeeper.quorumhadoop-服务器3:2181,hadoop-server3:2181,hadoop-server3:2181</值></属性></配置>2.2.3hdfs-site.xml<!--指定hdfs的nameservice为ns1。
这应该与core-site.xml中的名称服务匹配-->dfs.nameservicesns1<!--ns1下面是两个NameNodes,即nn1、nn2-->dfs.ha.namenodes.ns1nn1,nn2<!--nn1的RPC通信地址--><名称>dfs.namenode.rpc-地址.ns1.nn1</名称><值>hadoop-server1:9000</值></属性><!--nn1http通信地址-->dfs.namenode.http-address。
ns1.nn1
hadoop-server1:50070
<!--nn2的RPC通信地址-->dfs.namenode.rpc-address.ns1.nn2weekend02:9000<!--nn2的http通信地址-->dfs.namenode.http-address.ns1.nn2hadoop-server2:50070<!--JournalNode上NameNode的Meta指定保存数据的位置-->dfs.namenode.shared.edits.dirqjournal://hadoop-server3:8485;hadoop-server4:8485;hadoop-server5:8485/ns1
<!--指定JournalNode在本地磁盘上保存数据的位置--><名称>dfs.journalnode.edits.dir/home/hadoop/app/hadoop-2.4.1/journaldata<!--启用NameNode时自动切换失败-->dfs.ha。
自动-failover.enabled
true
<!--配置失败时如何实现自动切换-->dfs.client.failover.proxy。
provider.ns1
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
<!--配置隔离机制方法。
多个机制由换行符分隔。
即每种机制暂时使用一行-->dfs.ha.fencing.methodssshfenceshell(/bin/true)<!--ss使用sshfence隔离机制时需要h免登录--><属性><名称>dfs.ha.fencing.ssh.private-key-files</名称><值>/home/hadoop/.ssh/id_rsa</值></属性><!--配置sshfence隔离机制的超时时间-->dfs.ha.fencing.ssh.connect-timeout300002.2.4更改mapred-site.xml<!--mr框架为Yarn指定为模式--><属性><名称>mapreduce.framework.name</名称><值>纱线</值></属性></配置>2.2.5yarn-site.xml更改<!--启用RM高可用性-->yarn.resourcemanager.ha.enabledtrue<!--RM簇ID-->yarn.resourcemanager.cluster-idyrc<!--RM-->指定名称纱线资源管理器。
ha.rm-ids
rm1,rm2
<!--指定每个RM地址-->yarn.resourcemanager.hostname><值>hadoop-server1</值></属性><属性>yarn.resourcemanager.hostname.rm2hadoop-server2<!--zk指定集群地址-->resourcemanager。
zk-address
hadoop-server3:2181,hadoop-server4:2181,hadoop-server5:2181
yarn.nodemanager.aux-servicesmapreduce_shuffle2.2.6更改从属(slave为指定子节点位置)hadoop-server3hadoop-server4hadoop-server5
文章标签:
Dubbo Zookeeper
热门文章
1
SQL多表连接查询全解析:JOIN语句应... sql多表关联查询在执行SQL多表连接查询时,可以使用JOIN语句将多个表连接在...

2
Java中字符串类型详解:String与... 变量有字符类型,为什么没有字符串类型??基本类型:charshort、int、l...

3
JavaSE与JavaEE:从基础到企业... javase&#160;和javaee的区别?JavaSE和JavaEE...

4
Java程序员面试必知:核心技术问答与技... java编程程序员技术面试常见面试?随着互联网的不断发展,Java开发已经成为很...

5
Java.exe与Javaw.exe:区... 程序中java和javaw有什么区别java和javaw的区别:两者都是Java...

6
深入解析:Java中的javax包及其与... JAVA导入时,什么是javax?awt是java1.0,swing是java2...

7
Java去除字符串前空格:常见方法与技巧... JAVA怎么【只】去掉字符串【前面的】空格?JAVA中是否去除空格1.Strin...

8
北京Java/C++程序员薪资揭秘:云计... 一本211大学4年工作经验java程序员&#47;C++程序员现在北京能...

9
命令行运行Java:从编写到执行全攻略 怎么在命令行下运行java?以下是使用记事本运行Java程序的步骤:编写Java...

10
Java字符串处理与键盘输入、文件读取技... 编写一个Java应用程序,从键盘读取用户输入两个字符串,并重载3个strAdd函...