附录:服务状态码与常见报错

更新时间:
复制 MD 格式

EAS服务调用返回的HTTP状态码可帮助您快速定位问题。本文列出各状态码含义及常见报错的排查方法。

状态码说明

状态码

说明

200

服务正常返回。

400

请求体(Body)格式错误或自定义Processor代码异常。

说明

对于自定义Processor,如果代码抛出异常,会在服务端返回状态码400。建议在自定义Processor中指定返回其他状态码,以区分代码异常。

401

服务鉴权失败。详情见401 Authorization Failed

404

找不到服务。详情见404 Not Found

405

方法不被允许。比如服务器只支持GET请求,却发送了POST请求就会返回405。尝试更换请求方法。

408

请求计算超时。服务端为每个请求配置了默认超时时间(默认5秒,可在创建服务JSON文件中通过metadata.rpc.keepalive字段调整)。当单个请求处理时长超过该值后,服务端返回408并断开该TCP连接。

说明

单个请求的处理时长包含Processor计算时间、请求接收网络数据包时间和队列排队时间。

429

请求触发限流。

  • 若使用共享网关,默认限流策略:单服务1000 QPS,服务器组10000 QPS。共享网关由用户共享带宽,不适合时延敏感和高并发业务,建议使用专属网关(无默认限流)。

  • EAS提供了基于QPS的限流功能,请求并发数超出限制后,超出部分会被丢弃并返回429。通过在JSON文件中配置metadata.rpc.rate_limit字段开启。

450

超出队列长度丢弃请求

499

客户端主动断开连接。当客户端主动断开连接时,客户端不会收到499,该连接上未完成的请求会在服务端记录499。例如:客户端HTTP超时设为30毫秒,服务端处理需50毫秒,客户端等待30毫秒后放弃请求并断开连接,服务端监控中会出现499。

500

服务器内部错误。服务器遇到错误,无法完成请求。

501

尚未实施。服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。

502

错误网关。服务器作为网关或代理,从上游服务器收到无效响应。

503

服务不可用。通过网关访问服务时,如果后端服务实例状态全部为非Ready,则网关会返回状态码503。详见503 no healthy upstream

504

网关超时。详见504 timeout

505

HTTP版本不受支持。服务器不支持请求中所用的HTTP协议版本。

SDK调用错误码

使用EAS提供的官方SDK进行服务调用时,部分错误码为SDK转换生成,并非服务端原始返回。请以网关和服务日志中错误码为准。

状态码

说明

512

使用EAS Golang SDK调用服务,若客户端主动断开连接,将返回错误码512。此类超时断开在服务端对应状态码499。

常见报错

404 Not Found

404 错误通常由无效的请求路径、错误的请求体或服务不支持该接口导致。请根据收到的具体错误信息,参考以下场景进行排查。

错误信息

原因分析

解决方案

{"object":"error","message":"The model `` does not exist.","type":"NotFoundError","param":null,"code":404}

调用vLLM部署的服务/v1/chat/completions 接口时,请求体中model参数值为空或无效。

image

model的参数值须为正确的模型名称,可通过v1/models接口查询。

{"detail":"Not Found"}

请求路径不完整或错误。例如,调用LLM服务对话接口,未在基础地址后添加v1/chat/completions

image

确保 API 请求路径完整且正确。对于LLM服务,请参见LLM调用

调用 BladeLLM 的 /v1/models 接口,返回404: Not Found

BladeLLM部署的服务不支持v1/models接口。

image

请查阅BladeLLM服务调用参数配置说明获取其支持的接口列表。

在线调试页面返回 404,无其他信息。

请求路径错误。如在线调试时,基础地址通常是 http://123***.cn-hangzhou.pai-eas.aliyuncs.com/predict/服务名。错误地修改或删除了 服务名会导致 404。

image

在线调试时,通常不需要删除或修改默认提供的地址,仅追加需要调用的具体API路径。

API调用ComfyUI返回404 not found page

通过 API 调用Serverless 版本的 ComfyUI 服务 ,该版本不支持 API调用。

部署标准版或者API版,详情请参见AI视频生成-ComfyUI部署

400 Bad Request

请求体(Body)格式错误。请仔细检查请求体格式(如JSON结构)、字段名、数据类型是否正确。

401 Authorization Failed

访问服务时Token未指定、不正确或使用方式错误。请检查:

  • Token是否正确。服务概览页面,在基本信息区域单击查看调用信息

    说明

    鉴权Token默认后台自动生成,也可以通过自定义鉴权指定Token,并支持在服务更新时修改Token。

  • Token是否正确设置。

    • 使用curl命令,添加在HTTP请求头的Authorization字段中。例如:curl -H 'Authorization: NWMyN2UzNjBiZmI2YT***' http:// xxx.cn-shanghai.aliyuncs.com/api/predict/echo

    • 在使用SDK访问服务时,调用对应的SetToken()函数,详情请参见Java SDK使用说明

504 timeout

服务器作为网关或代理,但是没有及时从上游服务器收到请求。这通常意味着模型推理耗时过长。解决方法:

  1. 在调用代码中,主动延长HTTP请求的超时时间。

  2. 对于耗时很长的任务,建议改用EAS的 队列服务(异步调用) 模式,它可以处理批量或长时间运行的推理任务。

450 超出队列长度丢弃请求

服务端的计算实例收到请求后,先将请求放入队列排队。当实例中的worker(默认5个,可在创建服务JSON文件中通过metadata.rpc.worker_threads字段调整)空闲时,从队列中取数据计算。若worker计算时间过长导致队列堆积,队列打满后(默认长度64,可通过metadata.rpc.max_queue_size字段调整),新请求会被拒绝并返回450,避免队列过度堆积导致服务不可用。

说明

队列限长在一定程度上也是一种限流保护,避免大流量导致服务雪崩。

处理方法

  • 当返回的状态码有少量450时,因为服务端的实例是相互独立的,您可以通过重试调度到其他相对空闲的实例上,避免客户端感知,但不能无限重试,否则限流的保护作用会失效。

  • Processor内部代码卡住时,所有请求均返回状态码450。当所有worker在处理请求时出现死锁等场景,导致没有worker从队列中获取数据进行处理,这种场景需要排查Processor代码的Bug。

503 no healthy upstream

在线调试时报错,错误码为503,错误提示为“no healthy upstream”:

image

请如下排查:

  1. 查看实例状态,如实例已停止,重启服务即可。

  2. 如服务处于运行中状态,可能是CPU、内存或显存资源不足。

    • 当资源类型为公共资源时,建议稍后在非高峰时段再尝试调用,或更换其他资源规格和地域。

    • 当资源类型为专属资源(EAS资源组)时,确保专属资源组为实例预留足够的CPU、内存和显存(建议至少保留20%空闲资源作为缓冲)。

  3. 还有一种常见场景:服务状态为Running且实例均为Ready,但请求触发了代码Bug导致实例Crash,网关返回503。请结合日志排查修复。

报错:Unexpected token 12606 while expecting start token 200006

使用 vllm 部署 gpt-oss ,服务调用可能会出现以下错误:

image

解决方案:尝试使用SGLang加速部署方式。

curl调用报错no URL specified

使用如下命令发起请求后报错no URL specified

curl -X http://17****.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/service_name/**path** \
-H "Content-Type: application/json" \
-H "Authorization: **********==" \
-d '{"***":"****"}'

原因:curl命令使用了-X参数,但缺少了POST

调用返回ASCII 编码

可参考如下示例修改代码:

from flask import Flask, Response

@app.route('/hello', methods=['POST'])
def get_advice(): 
    result = "result"
    return Response(result, mimetype='text/plain', charset='utf-8')

服务日志中出现[WARN] connection is closed: End of fileWrite a Invalid stream: End of file,如何解决?

客户端与服务端的连接断开后,服务端回写请求结果时发现连接已关闭,会记录此warning日志。连接断开一般分两种情况:

  • 服务端超时断开连接:在Processor模式下,服务端默认超时时间为5秒,可通过服务的metadata.rpc.keepalive参数修改。超时后服务端关闭连接,并记录一个408状态码。

  • 客户端超时断开连接:客户端超时时间由调用端代码中的超时设置决定。超时未返回响应时,客户端主动断开连接,服务端监控会记录一个499状态码。

upstream connect error or disconnect/reset before headers. reset reason: connection termination

通常由长连接超时或实例负载不均衡引起。服务端处理超过客户端HTTP超时时间后,客户端放弃请求并断开连接,服务端监控会出现499状态码。推理耗时较长时,建议部署异步推理服务

Tensorflow/Pytorch processor部署的服务请求在线调试失败,如何解决?

出于性能考虑,TensorFlow/PyTorch ProcessorRequest Body采用非明文的protobuf格式。在线调试仅支持明文文本格式输入,因此该服务无法在控制台直接在线调试。您可以使用EAS提供的SDK来访问服务,各语言版本SDK参考:服务调用SDK