zookeeper的超时日志分析

java系统启动时总是报异常:

ERROR 2021-05-06 17:43:05,445 [main] org.apache.curator.ConnectionState.checkTimeouts(228) | Connection timed out for connection string (zk1:2181,zk2:2181,zk3:2181) and timeout (3000) / elapsed (3118)
org.apache.curator.CuratorConnectionLossException: KeeperErrorCode = ConnectionLoss
	at org.apache.curator.ConnectionState.checkTimeouts(ConnectionState.java:225)
	at org.apache.curator.ConnectionState.getZooKeeper(ConnectionState.java:94)
	at org.apache.curator.CuratorZookeeperClient.getZooKeeper(CuratorZookeeperClient.java:117)
	at org.apache.curator.framework.imps.CuratorFrameworkImpl.getZooKeeper(CuratorFrameworkImpl.java:489)
	at org.apache.curator.framework.imps.GetDataBuilderImpl$4.call(GetDataBuilderImpl.java:310)
	at org.apache.curator.framework.imps.GetDataBuilderImpl$4.call(GetDataBuilderImpl.java:299)
	at org.apache.curator.RetryLoop.callWithRetry(RetryLoop.java:109)
	at org.apache.curator.framework.imps.GetDataBuilderImpl.pathInForeground(GetDataBuilderImpl.java:296)


查看其源码原理,改变连接状态


栈:




这里的EventThread是一个事件监听线程,有事件才会触发更新连接时间(connectionStartMs)。再查找相关文档说可能是心跳时间>timeout时间。

查看配置是这样的:

client = CuratorFrameworkFactory.builder()
            .connectString("zk1:2181,zk2:2181,zk3:2181")
            .sessionTimeoutMs(5000).connectionTimeoutMs(3000)
            .retryPolicy(new ExponentialBackoffRetry(1000, 3)).build();
尝试把配置中的3000改成5000,因为后面重试3次是3000:

client = CuratorFrameworkFactory.builder()
            .connectString("zk1:2181,zk2:2181,zk3:2181")
            .sessionTimeoutMs(5000).connectionTimeoutMs(5000)
            .retryPolicy(new ExponentialBackoffRetry(1000, 3)).build();

再重启几次,问题得到解决。

上面的问题的解决方案2,感觉更好些.

分析日志看引用的是:

<groupId>org.apache.curator</groupId>
<artifactId>apache-curator</artifactId>
<version>2.8.0</version>

这个org.apache.curator.framework.imps.Backgrounding.inBackground对报错有些影响,看样子包有些老了。加入:

<dependency>
	<groupId>org.apache.curator</groupId>
	<artifactId>curator-recipes</artifactId>
	<version>4.2.0</version>
	<exclusions>
		<exclusion>
			<artifactId>zookeeper</artifactId>
			<groupId>org.apache.zookeeper</groupId>
		</exclusion>
	</exclusions>
</dependency>
相关包已更新:

就这样升一下版本,zookeeper也不报错了。我的zookeeper版本是3.4.5

文/程忠 浏览次数:0次   2021-05-06 17:55:50

相关阅读


评论:
点击刷新

↓ 广告开始-头部带绿为生活 ↓
↑ 广告结束-尾部支持多点击 ↑