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通讯,但是上一个例子只能实现一个服务端和一个客户端之间的通讯,如果有多个客户端连接服务端,则需要通过多线程技术来实 ...
随机推荐
- [双体系练习]Java基础练习题1
因为练习是word,本文我只是写了里面的部分内容,如果想查阅完整内容或者获取word以及PDF,请 关注微信公众号 乖乖狼科技 发送口令 akcd T1 静态代码块中不能? · [D ] A. 初始化 ...
- Qt/C++控件设计器/属性栏/组态/可导入导出/中文属性/串口网络/拖曳开发
一.功能特点 自动加载插件文件中的所有控件生成列表,默认自带的控件超过120个. 拖曳到画布自动生成对应的控件,所见即所得. 右侧中文属性栏,改变对应的属性立即应用到对应选中控件,直观简洁,非常适合小 ...
- Qt/C++编写onvif工具(搜索/云台/预置位/OSD/录像存储)
一.前言 从最初编写这个工具开始的时间算起来,至少5年多,一直持续完善到今天,这个工具看起来小也不小大也不大,但是也是经历过无数个现场的洗礼,毫不夸张的说,市面上能够遇到的主流的厂商的设备,都测试过, ...
- Qt音视频开发43-采集屏幕桌面并推流(支持分辨率/矩形区域/帧率等设置/实时性极高)
一.前言 采集电脑屏幕桌面并推流一般是用来做共享桌面.远程协助.投屏之类的应用,最简单入门的做法可能会采用开个定时器或者线程抓图,将整个屏幕截图下来,然后将图片传出去,这种方式很简单但是性能要低不少, ...
- Qt音视频开发1-vlc解码播放
一.前言 最开始接触视频监控这块的时候,用的就是vlc作为解码的内核,主要是因为vlc使用简单方便,直接传入一个句柄即可,简单几行代码就可以实现一个视频流播放,很适合初学者使用,也推荐初学者用qt+v ...
- JavaWeb代码架构中类之间的引用关系
为了加深对Java Web代码架构中类之间的引用关系的理解和记忆,特绘制了这一张图. Java EE应用架构:
- 【原创】浅谈EtherCAT主站EOE(下)-EtherCAT IgH主站EoE具体实现
目录 1.IgH 框架概述 2. IgH EOE机制 2.1 EoE服务规范 2.1 EoE虚拟网络设备 2.1.1 EoE Virtual Network Interfaces 2.1.2 EoE ...
- C++之OpenCV入门到提高007:调整图像亮度和对比度
一.介绍 今天是这个系列<C++之 Opencv 入门到提高>的第七篇文章.这篇文章也不难,介绍如何调整图像的亮度.图像本质上也是数据,既然是数据,我们就可以针对图像的每个像素进行增加或者 ...
- UOS系统mysql服务安装
UOS系统mysql服务安装 背景 1.安装环境:kvm虚拟机 2.运行环境:uos server-1060e 3.架构:x86 4.安装mysql版本:mysql-5.7 1.安装准备 # Mysq ...
- G1原理—2.G1是如何提升分配对象效率
大纲 1.G1的对象分配原理是怎样的 2.深入分析TLAB机制原理 3.借助TLAB分配对象的实现原理是什么 4.什么是快速分配 + 什么是慢速分配 5.大对象分配的过程 + 与TLAB的关系 6.救 ...