开发者学堂课程【企业级分布式应用服务 EDAS 使用攻略:开发常见问题】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/359/detail/4216
开发常见问题
内容介绍:
一、应用报错
二、HSF 服务调用出错
三、容器参数配置
一、应用报错
进入官网的详情页,打开 EDAS 开发者指南,点击查看最后一大部分 FAQ 查看 EDAS日志说明。开发中遇到的很多问题,都可以通过查看相关日志,找到问题所在进而解决问题。
EDAS 日记包括4个日志文件,通过前2个日志文件是在 tomcat 下的 cattalina.out 和localhost.log,通过这两个日志文件即可查询得知应用在启动过程中报错的原因,这两个日志文件的目录分别为:“/home/admin/taobao-tomcat-production-××××/logs/catta
lina.out”和“/home/admin/taobao-tomcat-production-××××/logs/localhost.log.×××”
比较通常的错误,如 no search method 或class not found 等通用错误,都可以在网上找到解决方案。此外,应用组件中报出的错误需要根据业务实际情况进行check。
后面的两个日志文件为 config.client.log 和 hsf.log, 这两个日志文件的目录分别为”/home/admin/configclient/logs/config.clien
t.log”和“/home/admin/logs/hsf/hsf.log”当应用在 HSF 服务在发布、注册会校用过程中出现的错误都会出现在这两个日志文件中。
总之,当应用报错时,可以在log中查询报错的原因,进而在网站上查询解决方法,或者查看应用的业务逻辑是否存在异常状态。
二、HSF服务调用出错
如 Consumer 调用 Provider 时可能会存在错误,这些错误可以通过 hsf.log 查询,或者若本地就存在 log 的输出,那本在本地的 log 输出中即可查询到错误原因。以下为通常情况下,HSF 服务调用报错的情况(每种错误都有不同的错误编码):
1.错误编码:HSF-0001
即无法找到调用的服务目标地址,需要使用的目标服务为:××××组别为:××××
解决方案:
(1)环境无关
①检查发布者和消费者配置的服务名称、版本号、组别三者是否一致(大小写也要相同,且不能有空格)
②服务调用太快(一般不会发生,可作为参考),在 configserver 将地址推送过来之前就发起调用导致出错,在服务消费者的配置项里添加 maxWaitTimeForCsAddress的相关配置。
(2)公共云、金融云、私有域等生产环境
①检查服务是否存在
②检查服务分组是否创建
③检查鉴权是否失败
通过以上方法,即可基本确定HSF服务调用报错的原因,进而解决问题。
2.错误编码:HSF-0002
即 HSF 服务调用时,消费端提示 HSFTimeOutException 报错,出现该错误的原因可能为:
(1)消费端调用服务端时,耗时大于了设置的超时时间,可能是由于 Provider 调用方法内部出错,导致无法返回以致超时;
(2)偶然情况下,两端出现 GC、检查服务端和客户端 gc 日志,耗时很长的 gc 导致超时;
3.错误编码:HSF-0021
即 [HSF-Provider]HSF thread pool is full,可以通过优化服务端的性能代码解决该问题。该错误主要是由于服务器端某个服务器处理速度过慢,不能及时处理客户端的请求,导致服务端业务执行的线程池达到最大值600(默认值),HSF 默认会 dump文件:
/home/admin/logs/hsf/HSF_JStack.log,查看此文件的 HSFBizProcessor.××× 线程模块信息,一般此时可以观察到具体是哪一层的业务逻辑 hang ,进而分析性能瓶颈,解决实际问题。
其他不常见的错误不作一一说明,可参照 EDAS 的 Trouble Shooting 进行解决方案的分析。
三、容器参数配置
在应用软件时,可能会对容器的参数进行配置,如最基本的 gvm 参数设置可根据 ECS 的配置及具体的业务需要 gvm 参数进行设置,通过 EDAS 即可进行设置。
也可能需要对 Tomcat 参数进行设置,如进行线程池的配置或调用 EDAS 已经提供的一些相关的容器参数配置。