Skip to main content

HandleHttpRequest 503错误

错误描述

当客户端访问组件开发的API服务时,可能会报:

Error 503 Service Unavailable

对应的HTTP状态码即为503

SERVICE_UNAVAILABLE(503, "Service Unavailable"),

该错误发生貌似无规律可循,偶尔发生的频率。

原因分析

经过对组件的分析,发现可能响应503错误的三个方面:

  • 组件的“请求队列大小”参数设置太小,默认值为50,可能过小,队列已满,导致其他高并发请求不能及时响应,而直接响应客户端503错误。

  • 组件的“HTTP 会话服务”参数所对应的 StandardHttpContextMap服务中的参数"最大请求响应数",默认值为5000,表示该会话服务同时支持的最大响应请求。如果新请求,超过了该值,则无法处理响应会话,也会导致该HandleHttpRequest组件直接响应客户端503错误。

  • 还有就是背压问题,组件输出数据流的待处理队列超过背压设置(默认1G大小,1万数量),如果队列中的数据流数据字节数或数量超过阀值,则平台会“惩罚”HandleHttpRequest组件而拒绝接受新的服务请求,并直接响应客户端503错误

解决办法

针对上述三种情况的,都是由于高并发请求而设置值小,所以可根据系统和平台情况,适当调大相应的设置值,比如:

  • 请求队列大小”50过小,可设置200,甚至500;
  • 会话服务中的"最大请求响应数"也可以调大到10000;
  • 而背压设置中,“背压数据大小阀值”可适当调大到2GB,而“背压对象阀值”则不做变更,超过背压阀值对于HandleHttpRequest组件来说,此种情况很少见,一般情况不可能超过阀值,因为HandleHttpRequest组件的并发响应数一般达不到。