基本问题排查
- 排查服务本身的发布、调用是否正确。
- 验证服务是否发布:在对应环境(日常、预发或线上环境)的服务治理控制台查询目标服务。
- 排查数据是否一致:核验名称是否匹配,检查代码中对应发布者和消费者XML配置的
interface
、version
和group
数据是否一致(注意大小写保持一致,且前后无空格)。
- 排查Telnet服务提供者IP HSF端口(默认为
12200
)是否可以正常连接。如果不能正常连接,表明服务提供者防火墙开启或网络存在问题,需要协调相关负责人员排查。
- 排查是否存在多网卡。如果存在多网卡,可以使用-Dhsf.server.ip来指定服务端的IP地址。
- 本地开发环境:设定JVM启动参数。
- 生产环境:加入钉群(钉群号:32874633),联系产品技术专家进行咨询。
- 在服务消费者的配置项,添加maxWaitTimeForCsAddress的相关配置。
服务调用过快,即在
ConfigServer将地址推送完成前就发起调用,由此导致出错。添加配置的具体操作,请参见
消费者订阅服务。
本地开发环境排查
本地使用轻量配置中心进行开发时,服务发布、订阅均无需鉴权,故服务正常启动就可以注册、订阅成功。在排除前面的基本问题后,可以按照如下步骤进行排查。
- 排查轻量配置中心。
- 登录轻量配置中心控制台,搜索对应的服务是否已经发布成功,服务提供者的IP地址和端口是否正确。如果服务未发布成功,按照步骤2进行排查。
- 搜索对应的服务是否已经订阅成功。如果服务未订阅成功,按照步骤3进行排查。
- 从订阅者机器上,通过Telnet查询服务提供者IP端口,验证是否可以正常联通。
- 排查服务提供者。
如果在轻量配置中心控制台上发现服务未能发布成功,请进行如下排查。
- 执行
ping jmenv.tbsite.net
命令,验证地址服务器IP地址跟轻量配置中心IP地址是否一致。
- 清空/{userhome}/logs/下所有日志,清空/{userhome}/configclient/目录。
- 启动服务提供者应用。如果之前Tomcat已经启动,请重启。
- 首先查看Tomcat启动日志,此文件中无异常信息,则最后显示启动耗时,单位为毫秒。如果有异常,请解决异常。
- 查看/{userhome}/configclient/logs/configclient.log或/{userhome}/logs/configclient/configclient.log(不同版本稍有区别),确认Connecting to remoting://{IP地址}连接的注册中心IP地址跟轻量配置中心IP地址是否一致。如果不一致,请确认轻量配置中心是否通过-Daddress.server.ip={可以访问的IP}调整过IP地址。
- 确认服务名、版本和分组是否为预期信息,其中对应服务[Register-ok][Publish-ok]。
- 如果显示[Register-ok][Publish-ok],说明服务提供者正常注册到服务注册中心。开发环境只要启动成功就可以注册成功。
说明 在实际开发过程中,机器上可能会同时启动多个服务提供者,例如A、B、C。每个服务提供者对外提供的HSF端口会在12200
的基础上依次累加。同时,通过在JVM参数上指定IP地址和端口-Dhsf.server.ip=<ip> -Dhsf.server.port=<port>
,可以在轻量配置中心检查服务端端口与实际启动的端口是否一致。如果不一致,会导致消费端调用失败。在此情况下,可以通过轻量配置中心控制台更新服务端端口,或者删除掉服务,然后重新发布应用。
- 排查服务消费者。
- 执行
ping jmenv.tbsite.net
命令,确认地址服务器IP地址跟轻量配置中心IP地址一致。
- 启动服务消费者应用。如果之前Tomcat已经启动,请重启。
- 首先查看Tomcat启动日志,此文件中无异常信息,最后显示启动耗时,单位为毫秒。如果有异常,请解决异常。
- 查看/{userhome}/configclient/logs/configclient.log或/{userhome}/logs/configclient/configclient.log(不同版本稍有区别),确认Connecting to remoting://{IP地址}连接的注册中心IP地址跟轻量配置中心IP地址是否一致。如果不一致,请确认轻量配置中心是否通过-Daddress.server.ip={可以访问的IP}调整过IP地址。
- 查看日志中对应的服务订阅情况,
[Data-received]
是否收到服务提供者的具体信息。如果未收到服务提供者数据,需要确认服务提供者服务已经注册成功。
- 从订阅者机器上,通过Telnet查询服务提供者IP端口,排查是否可以正常联通。如果不能正常连接,表明防火墙开启或网络存在问题,需要协调相关负责人员排查。
线上环境排查
使用SAE管理和部署的应用都是使用的正式环境,正式环境存在严格的服务鉴权和数据隔离。由于存在鉴权,正式环境不同主账号之间的服务无法直接互相调用,同时开发环境也无法调用访问正式环境的服务。
- 排查服务提供者。
- id="codeph_hor_1ki_a0p">cat /home/admin/{taobao-tomcat目录}/bin/setenv.sh此文件中
-Daddress.server.domain={地址服务器域名}
对应地址服务器域名。
ping {地址服务器域名}
查看返回的IP地址是否正常。如果不能ping通,说明网络存在问题,请排查网络。
- 清空/home/admin/logs/下所有日志,清空/home/admin/configclient/目录,清空/home/admin/{taobao-tomca目录}/logs/目录。
- 启动服务提供者应用,如果之前Tomcat已经启动,请重启。
- 首先查看/home/admin/{taobao-tomcat目录}/logs/catalina.out,此文件中无异常信息,最后显示启动耗时,单位为毫秒。如果有异常,请解决异常。
- 查看/home/admin/{taobao-tomcat目录}/logs/localhost-{日期}.log,此文件中无异常信息。如果有异常,请解决异常。
- 查看/home/admin/configclient/logs/configclient.log或/home/admin/logs/configclient/configclient.log(不同版本稍有区别),其中对应服务[Register-ok][Publish-ok],确定服务名、版本、分组都是预期的信息。如果[Publish or unregister error],请排查。
- 排查服务消费者。
- cat /home/admin/{taobao-tomcat目录}/bin/setenv.sh
-Daddress.server.domain={地址服务器域名}
对应地址服务器域名。
ping {地址服务器域名}
查看返回的IP是否正常。如果不能ping通,说明网络存在问题,请排查网络。
- 清空/home/admin/logs/下所有日志,清空/home/admin/configclient/目录,清空/home/admin/{taobao-tomcat目录}/logs/目录。
- 启动服务消费者应用。如果之前Tomcat已经启动,请重启。
- 首先查看/home/admin/{taobao-tomcat目录}/logs/catalina.out,此文件中无异常信息,最后显示启动耗时,单位为毫秒。如果有异常,请解决异常。
- 查看/home/admin/{taobao-tomcat目录}/logs/localhost-{日期}.log,此文件中无异常信息。如果有异常,请解决异常。
- 查看/home/admin/configclient/logs/configclient.log 或 /home/admin/logs/configclient/configclient.log(不同版本稍有区别,查看日志中对应的服务订阅情况,搜索对应服务,查看[Data-received]是否收到服务提供者的具体信息。如果未收到服务提供者数据,需要确定服务提供者服务已经注册成功。
- 从订阅者机器上,通过Telnet查询服务提供者IP端口,是否可以正常联通。如果不能正常连接说明防火墙开启或网络存在问题,需要协调相关负责人员排查。
- 排查相关日志。
- 查看/home/admin/configclient/snapshot/DEFAULT_ENV/可以查到消费端服务订阅到的实际服务列表数据信息如下:
[root@iZ2ze26awga24ijh93152dZ com.alibaba.edas.carshop.itemcenter.ItemService:1.0.0]# cat HSF-0846c173-decf-4b47-8aa0-xxxxxx.dat
[
"192.168.0.1:12200?_p\u003dhessian2\u0026_ENV\u003dDEFAULT\u0026v\u003d2.0\u0026_TIMEOUT\u003d3000\u0026_ih2\u003dy\u0026_TID\u003d0846c173-decf-4b47-8aa0-04b5a5610096\u0026_SERIALIZETYPE\u003dhessian\u0026_auth\u003dy"
]
- /home/admin/logs/hsf/hsf.log可以查看服务调用报错信息。
- /home/admin/logs/hsf/hsf-remoting.log记录消费端与服务端心跳检查日志。若出现如下日志,则表明该日志为消费端与提供端无法建立TCP长连接。
01 2018-06-20 12:35:00.797 ERROR [HSF-Worker-2-thread-1:hsf.remoting] [] [] [HSF-0085] [remoting] fail to connect: /192.168.1.1:12200 in timeout: 4000
- 检查对应的机器IP地址上的服务正常启动,对应的端口已经处于监听状态(例如
12200
)。
- 第一步没有问题,可以尝试在消费端,通过Telnet查询服务端IP端口,检查端口是否未开放。