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
组件的并发响应数一般达不到。