Zookeeper Java客户端连接慢、超时问题Ad-Hoc检查清单
TL;DR
排查思路:
- 首先确认你的设备到zookeeper的连通性是OK的,可通过命令
echo srvr | nc HOST 2181,检查是否可以正常打印节点信息。windows用户可以在命令行输入telnet HOST 2181连接后输入srvr然后回车。 - 若步骤1检查OK,但就是连接慢或者超时,则通过启动进程连接zk期间执行
jstack -l <pid>获取线程dump信息进一步分析,若不想一一排查,可尝试下面方法快速试下:- 本地配置hosts文件,添加下面条目:
127.0.0.1 localhost mbpro.local
::1 localhost mbpro.local
注意:
mbpro.local要替换为hostname命令的输出 - 启动Java进程时配置系统属性:
-Djava.net.preferIPv4Stack=true -Dzookeeper.sasl.client=false
- 本地配置hosts文件,添加下面条目:
case记录
Zookeeper Java客户端初始化打印日志记录环境信息,卡在InetAddress.getLocalHost().getCanonicalHostName()方法
"ZookeeperServiceUrlProvider-1" #1 prio=5 os_prio=0 tid=0x00000000033b0800 nid=0x432c runnable [0x000000000329e000]
java.lang.Thread.State: RUNNABLE
at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323)
at java.net.InetAddress.getAllByName0(InetAddress.java:1276)
at java.net.InetAddress.getAllByName0(InetAddress.java:1253)
at java.net.InetAddress.getHostFromNameService(InetAddress.java:634)
at java.net.InetAddress.getCanonicalHostName(InetAddress.java:588)
at org.apache.zookeeper.Environment.list(Environment.java:62)
at org.apache.zookeeper.Environment.logEnv(Environment.java:98)
at org.apache.zookeeper.ZooKeeper.<clinit>(ZooKeeper.java:97)
at ...
解决方法:本地配置hosts文件,添加下面条目
127.0.0.1 localhost mbpro.local
::1 localhost mbpro.local
注意:mbpro.local要替换为hostname命令的输出
DNS解析响应慢导致zk客户端SendThread卡住较长时间
"ZookeeperServiceUrlProvider-1-SendThread()@9231" daemon prio=5 tid=0x1b nid=NA waiting
java.lang.Thread.State: WAITING
at java.lang.Object.wait(Object.java:-1)
at java.lang.Object.wait(Object.java:502)
at java.net.InetAddress.checkLookupTable(InetAddress.java:1393)
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1310)
at java.net.InetAddress.getAllByName0(InetAddress.java:1276)
at java.net.InetAddress.getAllByName0(InetAddress.java:1253)
at java.net.InetAddress.getHostFromNameService(InetAddress.java:634)
at java.net.InetAddress.getHostName(InetAddress.java:559)
at java.net.InetAddress.getHostName(InetAddress.java:531)
at java.net.InetSocketAddress$InetSocketAddressHolder.getHostName(InetSocketAddress.java:82)
at java.net.InetSocketAddress$InetSocketAddressHolder.access$600(InetSocketAddress.java:56)
at java.net.InetSocketAddress.getHostName(InetSocketAddress.java:345)
at org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:998)
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1060)
解决方法:
- 进一步排查DNS解析响应慢的问题
- 切换至使用IP地址方式连接
客户端尝试SASL认证方式触发DNS解析,DNS解析响应慢导致超时
"ZookeeperServiceUrlProvider-1-SendThread(HOST:2181)" #34 daemon prio=5 os_prio=0 tid=0x0000024d6f94a000 nid=0xa984 runnable [0x000000ff9cffe000]
java.lang.Thread.State: RUNNABLE
at java.net.Inet4AddressImpl.getHostByAddr(Native Method)
at java.net.InetAddress$2.getHostByAddr(InetAddress.java:933)
at java.net.InetAddress.getHostFromNameService(InetAddress.java:618)
at java.net.InetAddress.getHostName(InetAddress.java:560)
at java.net.InetAddress.getHostName(InetAddress.java:532)
at java.net.InetSocketAddress$InetSocketAddressHolder.getHostName(InetSocketAddress.java:82)
at java.net.InetSocketAddress$InetSocketAddressHolder.access$600(InetSocketAddress.java:56)
at java.net.InetSocketAddress.getHostName(InetSocketAddress.java:345)
at org.apache.zookeeper.SaslServerPrincipal$WrapperInetSocketAddress.getHostName(SaslServerPrincipal.java:105)
at org.apache.zookeeper.SaslServerPrincipal.getServerPrincipal(SaslServerPrincipal.java:59)
at org.apache.zookeeper.SaslServerPrincipal.getServerPrincipal(SaslServerPrincipal.java:41)
at org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1161)
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1211)
Locked ownable synchronizers:
- None
解决方法:启动Java进程时配置-Dzookeeper.sasl.client=false禁用SASL(如果你不知道SASL是什么,那你大概率并不需要它)
详见:SASL Client-Server mutual authentication
参考链接
关于作者
作者 萧易客 一线深耕消息中间件,RPC框架多年,欢迎评论区或通过邮件交流。
微信公众号: 萧易客
github id: shawyeok
Zookeeper Java客户端连接慢、超时问题Ad-Hoc检查清单的更多相关文章
- Zookeeper学习记录及Java客户端连接示例
1. Zookeeper 1.1 简介 ZooKeeper is a centralized service for maintaining configuration information, na ...
- 通过java客户端连接hbase 注意事项
1.通过Java客户端连接Hbase,其中hbase通过zookeeper去管理,需要注意的是客户端端口. 通过在浏览器端输入地址查看:http://192.168.3.206:60010/maste ...
- 【RabbitMQ】CentOS安装RabbitMQ,及简单的Java客户端连接
在CentOS安装 因Rabbit MQ使用Erlang,所以需要先安装Erlang,安装过程中可能会遇到种种问题,可参考CentOS 6.5安装Erlang/OTP 17.0.然后就可以安装MQ了. ...
- Elasticsearch - java客户端连接
写在前面的话:读书破万卷,编码如有神-------------------------------------------------------------------- 最简单的在java客户端连 ...
- zookeeper设置客户端连接超时被expired
在网络环境非常差的情况下,使用zookeeper集群往往会遇到连接expired了: 客户端提示连接从ZOO_CONNECTION_STATE变为ZOO_EXPIRED_SEESION_STATE,然 ...
- RabbitMQ/JAVA 客户端连接测试
这里是一个简单的helloworld测试. 这里在eclipse平台中实现 细节不再赘述.重点是导入rabbitmq-java-client的jar包 下载地址:http://www.rabbitmq ...
- java客户端连接MongoDB数据库的简单使用
1.下载mongoDB的jar包,并引入到工程的CLASSPATH中下载:mongodb2.5驱动包下载 如果使用maven项目,最新的依赖如下: <dependency> <gro ...
- Java客户端连接kafka集群报错
往kafka集群发送消息时,报错如下: page_visits-1: 30005 ms has passed since batch creation plus linger time 加入log4j ...
- 关于Java客户端连接虚拟机中的Kafka时,无法发送、接收消息的问题
kafka通过控制台模拟消息发送和消息接收正常,但是通过javaAPI操作生产者发送消息不成功 消费者接收不到数据解决方案? 1.问题排查 (1)首先通过在服务器上使用命令行来模拟生产.消费数据,发现 ...
- java socket通讯(二)处理多个客户端连接
通过java socket通讯(一) 入门示例,就可以实现服务端和客户端的socket通讯,但是上一个例子只能实现一个服务端和一个客户端之间的通讯,如果有多个客户端连接服务端,则需要通过多线程技术来实 ...
随机推荐
- 助推乡村振兴,四川农担X中电金信大数据智能风控平台彰显“榜样的力量”
在2024年3月召开的两会上,政府工作报告首次提到了要大力发展科技金融.绿色金融.普惠金融.养老金融.数字金融,为深入推进金融高质量发展,走中国特色金融发展之路指明了方向.其中,四川农担作为一家专注 ...
- 【单片机】初次实验:Keil51的使用
哔哩哔哩/CSDN/博客园:萌狼蓝天 延时器 delay(int count){ int i,j; for(i=0;i<count;i++){ for(j=0;j<1000;j++); } ...
- Qt编写的项目作品17-自定义曲线图柱状图
一.功能特点 可设置X轴Y轴范围值. 可设置背景颜色.文本颜色.网格颜色. 可设置三条曲线颜色.颜色集合. 可设置是否显示十字定位线,支持分别开启横向或者纵向定位线. 可设置十字定位线的宽度.颜色. ...
- error C2589: “(”:“::”右边的非法标记错误的处理
问题:error C2589: "(":"::"右边的非法标记错误的处理 标准库在<algorithm>头中定义了两个模板函数std::min() ...
- [转]VS2019+CUDA11.1 没有CUDA出现
1.VS2019+CUDA11.1 没有CUDA出现 2.VS+CUDA 新建项目里没有CUDA选项(附详细图文步骤) 3.No Cuda 10.1 runtime Template in Visua ...
- [转]奇异值分解(SVD)方法求解最小二乘问题的原理
原文链接:奇异值分解(SVD)方法求解最小二乘问题的原理 翻译 搜索 复制
- 网络编程入门如此简单(四):一文搞懂localhost和127.0.0.1
本文由萤火架构分享,原题"localhost和127.0.0.1的区别是什么?",原文链接"juejin.cn/post/7321049446443417638" ...
- 记录socket的使用
今天记录一下socket的基本使用方法,直接上代码 initWebSocket() { //初始化weosocket const wsuri = "socket地址";//地址以w ...
- MACOS 降级
最近升级了macos 15.2,结果导致外接显示器显示不正常,经常断掉或者黑屏,因此macos进行降级处理: 1. 首先在App Store下载Ventura 系统; 2. 准备一个16G的U盘,然后 ...
- python_pip 安装工具包
e.g: pip install pygame http://mirrors.aliyun.com/pypi/simple/ 安装方法可以直接在命令行输入pip install -扩展包名字. 加快安 ...