来自 SocketException 的 Azure 函数代理内部服务器错误 500
Azure Function Proxy Internal Server Error 500 from SocketException
我有一个 Azure 函数,它使用代理并转发到另一个 azure 函数作为后端。有一个接受 GET 的 /api/ping 端点。当我向 ping 发送 HTTP-GET 时,我偶尔会收到 500 内部服务器错误,它在我只看到代理上的请求但看不到后端 code-executing 函数上的请求的地方出现故障。
我在 header 中添加了 header“Proxy-Trace-Enabled”表示“真”以跟踪结果。我的 D:\home\LogFiles\Application\Proxies\DetailedTrace 文件夹中有结果。在那里,失败请求的日志包含一个“后端”json object 以及以下内容
{
"source": "forward-request",
"timestamp": "2020-08-20T15:42:20.8272145Z",
"elapsed": "00:00:00.0061051",
"data": {
"messages": [
"Only one usage of each socket address (protocol/network address/port) is normally permitted Only one usage of each socket address (protocol/network address/port) is normally permitted",
"Only one usage of each socket address (protocol/network address/port) is normally permitted",
"Only one usage of each socket address (protocol/network address/port) is normally permitted"
]
}
}
我相信这是 DotNet 上的 Azure Functions 1.0,但它是很久以前创建的。
为什么我的简单 Azure Function 代理给我内部服务器错误,这些错误没有转发到我的后端代码来执行?
Azure Function App Service 计划有与套接字连接相关的 TCP 连接阈值。该文档位于 blog I'll link here.
在使用 similar correlation between issues 的 TCP/Port Exhaustion 上有一个类似的问题。虽然报告的异常是不同的,但在我扩展其所在的应用服务时,错误在我的测试中消失了。
示例:
我有 2 个 Azure Functions,FunctionA 和 FunctionB。 FunctionA 是一个代理,在 App Service Plan P1 上没有后端执行。 FunctionB 是 non-correlated 函数,但在同一个应用服务计划 P1 上执行。
应用服务计划 P1 下的函数 A 在调用时出现内部 500 服务器错误问题。在 App Insights 中报告为 Faulted,并在后端日志中作为套接字异常进行跟踪。
我在应用服务计划 P3 上重新创建了 Azure 函数 FunctionA。 FunctionA 没有收到 500 个内部服务器错误。但是,它不需要 P3 付款计划的规模。所以我把它移回了P1。再次发生服务器错误。
FunctionB 与 FunctionA (P1) 使用相同的应用服务计划。 Azure 监控指标总计每分钟 4,200 个 SocketOutboundAll。我将 FunctionB 从 P1 移动(删除并重新创建)到 P3。我将 FunctionA 保留在 P1 上。 SocketOutboundAll 的错误已从 P1 上的 FunctionA 中消除。 P3 App Service Plan 上的功能也没有报告任何异常。
我有一个 Azure 函数,它使用代理并转发到另一个 azure 函数作为后端。有一个接受 GET 的 /api/ping 端点。当我向 ping 发送 HTTP-GET 时,我偶尔会收到 500 内部服务器错误,它在我只看到代理上的请求但看不到后端 code-executing 函数上的请求的地方出现故障。
我在 header 中添加了 header“Proxy-Trace-Enabled”表示“真”以跟踪结果。我的 D:\home\LogFiles\Application\Proxies\DetailedTrace 文件夹中有结果。在那里,失败请求的日志包含一个“后端”json object 以及以下内容
{
"source": "forward-request",
"timestamp": "2020-08-20T15:42:20.8272145Z",
"elapsed": "00:00:00.0061051",
"data": {
"messages": [
"Only one usage of each socket address (protocol/network address/port) is normally permitted Only one usage of each socket address (protocol/network address/port) is normally permitted",
"Only one usage of each socket address (protocol/network address/port) is normally permitted",
"Only one usage of each socket address (protocol/network address/port) is normally permitted"
]
}
}
我相信这是 DotNet 上的 Azure Functions 1.0,但它是很久以前创建的。 为什么我的简单 Azure Function 代理给我内部服务器错误,这些错误没有转发到我的后端代码来执行?
Azure Function App Service 计划有与套接字连接相关的 TCP 连接阈值。该文档位于 blog I'll link here. 在使用 similar correlation between issues 的 TCP/Port Exhaustion 上有一个类似的问题。虽然报告的异常是不同的,但在我扩展其所在的应用服务时,错误在我的测试中消失了。
示例: 我有 2 个 Azure Functions,FunctionA 和 FunctionB。 FunctionA 是一个代理,在 App Service Plan P1 上没有后端执行。 FunctionB 是 non-correlated 函数,但在同一个应用服务计划 P1 上执行。
应用服务计划 P1 下的函数 A 在调用时出现内部 500 服务器错误问题。在 App Insights 中报告为 Faulted,并在后端日志中作为套接字异常进行跟踪。
我在应用服务计划 P3 上重新创建了 Azure 函数 FunctionA。 FunctionA 没有收到 500 个内部服务器错误。但是,它不需要 P3 付款计划的规模。所以我把它移回了P1。再次发生服务器错误。
FunctionB 与 FunctionA (P1) 使用相同的应用服务计划。 Azure 监控指标总计每分钟 4,200 个 SocketOutboundAll。我将 FunctionB 从 P1 移动(删除并重新创建)到 P3。我将 FunctionA 保留在 P1 上。 SocketOutboundAll 的错误已从 P1 上的 FunctionA 中消除。 P3 App Service Plan 上的功能也没有报告任何异常。