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通讯,但是上一个例子只能实现一个服务端和一个客户端之间的通讯,如果有多个客户端连接服务端,则需要通过多线程技术来实 ...
随机推荐
- Python 证件照换底色
# -*- coding: utf-8 -*- ''' @Time : 2021/4/12 19:06 @Author : 水一RAR ''' import numpy as np import cv ...
- 【人工智能】【Python】Anacond基础操作
# 001.在 Anaconda 中使用 Conda 管理 Python 环境 工具:Anaconda Prompt(Anaconda)| 请使用管理员权限运行 更新Anaconda conda up ...
- fabric2.0开发 部署fabric环境和fabric-samples的启动(2)
通过上一篇文章我们已经将fabric的基本环境搭建成功,接下来我们开始运行使用并初步认识fabric. 创建项目目录 mkdir -p ~/go/src/github.com/hyperledger ...
- Qt编写4K/8K大分辨率播放器(8K占用1%CPU)
一.前言 在经过多种内核的洗礼以后,逐渐对不同内核的不同音视频文件和视频流进行大量的对比测试,比如测试对各种格式的支持性,对各种网络流的支持程度,在同一个地址下占用的CPU/GPU资源比对,最终发现播 ...
- Qt编写的项目作品25-硬件综合应用(热敏打印+身份证+短信猫)
一.功能特点 (一).串口热敏打印 标准热敏打印协议解析,无依赖,支持任意系统. 可打印各种文字信息比如访客单.报警信息等. 可打印条形码即一维码. 可打印二维码,设置二维码尺寸. 支持多线程打印图片 ...
- [转]CMake:相关概念与使用入门
CMake:相关概念与使用入门(一) CMake:搜索文件和指定头文件目录(三) CMake 子工程添加 根目录中他文件夹里的cpp文件 翻译 搜索 复制
- opencv中 在特征点匹配代码举例,以及queryIdx和trainIdx的用法
一.用法 在特征点匹配中,queryIdx和trainIdx是匹配对中的两个索引,用于指示匹配点在不同图像或特征向量中的位置.1.假设我们有两幅图像A和B,并使用特征点提取算法(如SIFT)从它们中提 ...
- AI Agent系列-什么是AI智能体,使用Semantic Kernel开发一个AI Agent
今年最热的技术除了LLM大语言模型外,AI Agent智能体成为下一个最热的技术发展热点.. 近期准备整理几篇AI智能体的博客,带着大家了解并学习AI 智能体的开发和应用. 一.什么是AI 智能体 A ...
- 即时通讯技术文集(第45期):微信、QQ技术精华合集(Part2) [共14篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第45 期. [-1-] QQ音乐团队分享:Android中的图片压缩技术详解(上篇) [链接 ...
- GRPC-JAVA
近一年来一直在用公司内wiki进行技术调研以及记录,后期有时间将逐步迁移至博客园 参考资料: https://github.com/grpc/grpc-java https://www.cnblogs ...