You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Entity Framework与PostgreSQL执行DbCommand时随机超时问题咨询

PostgreSQL连接超时异常:解决方法与根本原因

异常日志

Microsoft.EntityFrameworkCore.Database.Command [Error] 执行DbCommand失败(耗时"32,028"ms)...
Microsoft.EntityFrameworkCore.Query [Error] 遍历查询结果时发生异常,上下文类型为...
"System.InvalidOperationException: 出现可能由瞬时故障引发的异常。 ---> Npgsql.NpgsqlException (0x80004005): 从流读取时发生异常 ---> System.TimeoutException: 读取尝试超时...
[Error] 出现可能由瞬时故障引发的异常。

环境详情

  • 应用服务器:Linux系统,ASP.NET MVC架构
  • 数据库:PostgreSQL,部署在同网络内另一台Linux服务器

临时处理方式

遇到无响应时重复请求可成功,但仅为临时 workaround,无法解决根源问题。

最终解决办法

修改数据库连接字符串,添加配置Polling=false后问题彻底解决。该方案与GitHub issue #3559中的解决方案一致。

根本原因

这个问题的核心是Npgsql驱动在Linux环境下的轮询机制兼容性问题:

  • Linux环境下,Npgsql默认使用epoll/poll这类轮询方式监听网络流的读取事件
  • 当网络存在轻微波动、TCP连接处于半开状态,或者服务器内核的网络参数(如TCP keepalive配置)与轮询逻辑不匹配时,轮询机制无法正确识别数据可读状态,最终触发读取超时
  • 设置Polling=false后,驱动会切换为阻塞式IO模式,绕过了有问题的轮询逻辑,因此解决了超时问题

内容的提问来源于stack exchange,提问作者H.A.H.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 19:17:11