<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Zookeeper &#8211; 编码无悔 /  Intent &amp; Focused</title>
	<atom:link href="https://www.codelast.com/tag/zookeeper/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.codelast.com</link>
	<description>最优化之路</description>
	<lastBuildDate>Sun, 03 May 2020 11:47:33 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>[原创]Zookeeper相关的ConnectionLossException的解决办法</title>
		<link>https://www.codelast.com/%e5%8e%9f%e5%88%9bzookeeper%e7%9b%b8%e5%85%b3%e7%9a%84connectionlossexception%e7%9a%84%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95/</link>
					<comments>https://www.codelast.com/%e5%8e%9f%e5%88%9bzookeeper%e7%9b%b8%e5%85%b3%e7%9a%84connectionlossexception%e7%9a%84%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95/#respond</comments>
		
		<dc:creator><![CDATA[learnhard]]></dc:creator>
		<pubDate>Mon, 12 Aug 2013 16:05:36 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[原创]]></category>
		<category><![CDATA[ConnectionLossException]]></category>
		<category><![CDATA[Zookeeper]]></category>
		<guid isPermaLink="false">http://www.codelast.com/?p=6960</guid>

					<description><![CDATA[<p>
最近遇到了一个比较头疼的问题：有一个Java project中的test case在Jenkins自动nightly build的时候经常failed，有越来越频繁的趋势，但是如果在它failed之后到Jenkins上手工重新run，它有时又能成功（但还是有失败的，失败与成功的比例大概各占一半）。<br />
而且在我的计算机（Ubuntu）上跑这个test case，它几乎从来不fail，但是在Jenkins服务器上跑，它就总是挂掉。<br />
这种诡异的问题很恼人，经过Jenkins记下来的build log分析，觉得最有可能的原因是和Zookeeper有关，因为这个test case使用了<a href="http://curator.incubator.apache.org/" rel="noopener noreferrer" target="_blank"><span style="background-color:#ffa07a;">Curator</span></a>的TestingServer来模拟Zookeeper Server，而且这个test case中启动了很多的service并注册到了Curator模拟的Zookeeper Server上，而且在test case运行的过程中，还会有很多个client不断地连接到Zookeeper Server上，从中取出多个service的信息，并与它们交互，总而言之，test case的流程比较复杂。<br />
<span id="more-6960"></span><br />
test case failed的时候，有一个特点：运行时间特别长，甚至于需要60多秒才能完成，从log可见，Curator会retry多次，耗掉了比较多的时间。failed的关键日志如下：</p>
<blockquote>
<div>
		[main-EventThread] ERROR c.n.c.f.imps.CuratorFrameworkImpl 416 - Background operation retry gave up org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss at org.apache.zookeeper.KeeperException.create(KeeperException.java:90) ~[zookeeper-3.3.1.jar:3.3.1-942149] <span class="Apple-tab-span" style="white-space:pre"> </span>at com.netflix.curator.framework.imps.CuratorFrameworkImpl.processBackgroundOperation(CuratorFrameworkImpl.java:380) ~[curator-framework-1.0.1.jar:na]&#160;</div>
<div>
		at com.netflix.curator.framework.imps.BackgroundSyncImpl$1.processResult(BackgroundSyncImpl.java:49)</div></blockquote>&#8230; <a href="https://www.codelast.com/%e5%8e%9f%e5%88%9bzookeeper%e7%9b%b8%e5%85%b3%e7%9a%84connectionlossexception%e7%9a%84%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95/" class="read-more">Read More </a>]]></description>
										<content:encoded><![CDATA[<p>
最近遇到了一个比较头疼的问题：有一个Java project中的test case在Jenkins自动nightly build的时候经常failed，有越来越频繁的趋势，但是如果在它failed之后到Jenkins上手工重新run，它有时又能成功（但还是有失败的，失败与成功的比例大概各占一半）。<br />
而且在我的计算机（Ubuntu）上跑这个test case，它几乎从来不fail，但是在Jenkins服务器上跑，它就总是挂掉。<br />
这种诡异的问题很恼人，经过Jenkins记下来的build log分析，觉得最有可能的原因是和Zookeeper有关，因为这个test case使用了<a href="http://curator.incubator.apache.org/" rel="noopener noreferrer" target="_blank"><span style="background-color:#ffa07a;">Curator</span></a>的TestingServer来模拟Zookeeper Server，而且这个test case中启动了很多的service并注册到了Curator模拟的Zookeeper Server上，而且在test case运行的过程中，还会有很多个client不断地连接到Zookeeper Server上，从中取出多个service的信息，并与它们交互，总而言之，test case的流程比较复杂。<br />
<span id="more-6960"></span><br />
test case failed的时候，有一个特点：运行时间特别长，甚至于需要60多秒才能完成，从log可见，Curator会retry多次，耗掉了比较多的时间。failed的关键日志如下：</p>
<blockquote>
<div>
		[main-EventThread] ERROR c.n.c.f.imps.CuratorFrameworkImpl 416 - Background operation retry gave up org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss at org.apache.zookeeper.KeeperException.create(KeeperException.java:90) ~[zookeeper-3.3.1.jar:3.3.1-942149] <span class="Apple-tab-span" style="white-space:pre"> </span>at com.netflix.curator.framework.imps.CuratorFrameworkImpl.processBackgroundOperation(CuratorFrameworkImpl.java:380) ~[curator-framework-1.0.1.jar:na]&nbsp;</div>
<div>
		at com.netflix.curator.framework.imps.BackgroundSyncImpl$1.processResult(BackgroundSyncImpl.java:49) [curator-framework-1.0.1.jar:na]&nbsp;</div>
<div>
		at org.apache.zookeeper.ClientCnxn$EventThread.run(ClientCnxn.java:575)<br />
		......</div>
</blockquote>
<div>
	就是这个时不时发生的ConnectionLossException，真把人折腾死。在解决过程中，我依次尝试了几种方法：<br />
	<span style="color: rgb(255, 255, 255);">文章来源：</span><a href="http://www.codelast.com/" rel="noopener noreferrer" target="_blank"><span style="color: rgb(255, 255, 255);">http://www.codelast.com/</span></a><br />
	<span style="background-color:#00ff00;">【1】</span>修改test case中service的端口<br />
	一开始这样做是因为我怀疑test case fail与我启动的多个service的端口冲突有关。本来这些service使用的就是随机的端口号，为了让它们更不可能冲突，修改代码让它们分布在不同的范围内。<br />
	结果：无效，test case仍然fail。可见不是端口问题。</p>
<p>	<span style="background-color:#00ff00;">【2】</span>升级jar包的版本<br />
	后来这样做是因为我找到了<a href="https://issues.apache.org/jira/browse/ZOOKEEPER-1125" rel="noopener noreferrer" target="_blank"><span style="background-color:#ffa07a;">这个</span></a>网页，里面有人提供了一个patch。由于我使用的Curator和Zookeeper的jar包版本都比较低，所以，如果是lib的bug造成的，那么我在上面耗那么多时间就太不值了，所以我要确保罪魁祸首不是它们。<br />
	因此我决定先更新一批jar包，看能否解决问题。<br />
	于是，我到<a href="http://curator.incubator.apache.org/" rel="noopener noreferrer" target="_blank"><span style="background-color:#ffa07a;">Curator</span></a>的主页上，想下载一个最新版，但是我个人觉得，其网页做得实在是太太太太...不人性化了，这是因为：首先，大多数类似的网站都有一个&ldquo;Download&rdquo;链接，这上面偏偏叫&ldquo;Releases&rdquo;，这不是故意给人造成麻烦吗？一点也不直观。<br />
	其次，你到&ldquo;Releases&rdquo;页面中，经过层层点击，最终下载了一个压缩包（例如apache-curator-2.2.0-incubating-source-release.zip）之后，解压开来，发现它需要<a href="http://maven.apache.org/" rel="noopener noreferrer" target="_blank"><span style="background-color:#ffa07a;">Maven</span></a>才能编译。好吧，哥没装这货...而且我当时的网速特别慢，Maven自动下载依赖包会要了我的命的（不知道会要多长时间）。我只是想要几个小小的jar包啊，放过我吧...<br />
	于是我再次回到Curator网站上，仔细看看它是否提供了jar包下载，睁大眼睛看到了下面的这句话：</div>
<blockquote>
<div>
		Curator binaries are published to Maven Central. Curator consists of several artifacts.&nbsp;</div>
</blockquote>
<div>
	我终于明白了，我应该到<a href="http://search.maven.org/" rel="noopener noreferrer" target="_blank"><span style="background-color:#ffa07a;">Maven Central</span></a>上去下载jar包啊！赶紧上去，分别搜索curator-framework、curator-client、curator-test，分别找到了最新版的这些jar包（2.2.0版），更新到Java project中。<br />
	<span style="color: rgb(255, 255, 255);">文章来源：</span><a href="http://www.codelast.com/" rel="noopener noreferrer" target="_blank"><span style="color: rgb(255, 255, 255);">http://www.codelast.com/</span></a><br />
	<span style="background-color: rgb(0, 255, 0);">【3】</span>改程序<br />
	更新完jar包就万事顺利了？绝对没有。2.2.0版的Curator和1.x版有很大的不同，连package name都改了一堆啊！我靠，project一编译，一堆的error，看了都头晕。<br />
	好吧，我耐心地一个个改完，最后，本机上的的test case终于可以跑过了。<br />
	然后，就是放到Jenkins服务器上检验效果的时候了！整个project拷贝到Jenkins服务器上，运行ant test，经过并不漫长的等待之后，test case通过了。</p>
<p>	<span style="color: rgb(255, 255, 255);">文章来源：</span><a href="https://www.codelast.com/" rel="noopener noreferrer" target="_blank"><span style="color: rgb(255, 255, 255);">https://www.codelast.com/</span></a><br />
	<span style="color: rgb(255, 0, 0);">➤➤</span>&nbsp;版权声明&nbsp;<span style="color: rgb(255, 0, 0);">➤➤</span>&nbsp;<br />
	转载需注明出处：<u><a href="https://www.codelast.com/" rel="noopener noreferrer" target="_blank"><em><span style="color: rgb(0, 0, 255);"><strong style="font-size: 16px;"><span style="font-family: arial, helvetica, sans-serif;">codelast.com</span></strong></span></em></a></u>&nbsp;<br />
	感谢关注我的微信公众号（微信扫一扫）：</p>
<p style="border: 0px; font-size: 13px; margin: 0px 0px 9px; outline: 0px; padding: 0px; color: rgb(77, 77, 77);">
		<img decoding="async" alt="wechat qrcode of codelast" src="https://www.codelast.com/codelast_wechat_qr_code.jpg" style="width: 200px; height: 200px;" /></p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.codelast.com/%e5%8e%9f%e5%88%9bzookeeper%e7%9b%b8%e5%85%b3%e7%9a%84connectionlossexception%e7%9a%84%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
