ServiceComb/CSE常见问题处理(190110)

本文档列举了ServiceComb/CSE使用过程中遇到的问题及其解决方案,包括Tomcat重复加载war包、CSE Java SDK线程池配置、空schema导致客户端异常、及'Response is closed'异常的原因与处理。
摘要由CSDN通过智能技术生成

一、Tomcat重复加载war包问题

问题现象

有同事开发了一个demo服务,服务包含前端页面和ServiceComb开发的REST后端服务两部分。打成war包部署在Tomcat中,发现这个服务会在服务中心注册两个地址相同的实例。观察日志,发现Spring Context加载了两遍,并且Tomcat的webapps目录下存在一个与war包同名的目录和一个ROOT目录,两个目录中的内容是相同的。

问题原因

Tomcat在启动时会将webapps目录下的war包解压到一个同名目录下,将其作为一个context加载。而在Tomcat的conf/server.xml文件中,又额外定义了一个Context:

<Context path="/" reloadable="true" docBase="${war包的名字}"/>

于是该war包会作为root context 又被加载一次。

解决方案

删掉conf/server.xml文件中定义的context,把拷贝到webapps目录下的war包改名为ROOT.war。Tomcat启动时会自动将war包解压作为root context加载。

二、CSE/ServiceComb JAVA SDK如何配置业务处理线程池

CSE JAVA SDK的线程池模型比较复杂,对于tomcat场景,以及Edge Service的vert.x场景,都有一个业务处理线程池(Edge Service的场景默认在reactive模式,是没有业务线程池的)。CSE设置的默认线程池的线程个数为2 * CPU个数。如果部分服务处理比较慢(比如评价时延>50ms),那么建议要设置一个较大的业务线程池,以提升吞吐量。如果所有接口都处理的很快,则不需要设置非常大的业务线程池,过多线程反而会因为线程调度,增加处理时延。如果一个微服务,有少量的几个接口处理非常耗时,需要考虑将这些接口放到独立的线程池执行(线程池隔离),防止访问慢的接口,影响访问快的接口。 

线程池配置 (可以适当的抽时间学习下线程模型:https://bbs.huaweicloud.com/blogs/0a1a862f412611e89fc57ca23e93a89f

  1.        通过配置项servicecomb.executors.default给业务接口制定执行线程池。配置项的的缺省值为servicecomb.executor.groupThreadPool,这个值是Bean的ID,CSE缺省的几个Bean ID如下:

1

2

3

4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值