gpt4 book ai didi

c# - ASP.NET 网站在恰好 50 个请求后崩溃

转载 作者:太空狗 更新时间:2023-10-30 01:31:34 26 4
gpt4 key购买 nike

我正在托管一个 ASP.NET Web API,它已经投入生产多年,并且已经经历了数十次更新。突然之间,仅对代码进行了微小更改后,无论使用哪种浏览器或客户端,API 都会在恰好 50 次请求 后崩溃。 Web 服务器重启会立即恢复 API 可用性(应用程序池回收不会),但神秘的倒计时重新开始......

这种奇怪的效果在多台机器(Windows Server 2008、Windows Server 2013 和 Windows 7)和不同的 Web 服务器(IIS 7.5、IIS 8.5、UltiDev Web Server)中持续存在。 IDE是Visual Studio Community 2015; .NET 版本为 4.5.2。

我没有添加外部 API 依赖项。我怀疑 Firebird(唯一的外部依赖项)施加了“50”的限制,但我所有的试验和谷歌搜索都无济于事。

我能提取的唯一有用的日志消息是数据库连接因超时错误而失败。 (我正在使用 Firebird 2.5 SuperServer x64 和 Firebird .NET Provider 以及版本 3.0.2 的 FirebirdSql.Data.FirebirdClient.dll,到目前为止它对我很有帮助。)不过,我可以连接到数据库并通过 FlameRobin 浏览它。无论如何,只要我返回到以前的 API 版本,一切都会正常进行。

崩溃后,先前清除的 firebird.log 包含 50 条相同的消息,如下所示:

AB-01234-CD (Server)    Fri Nov 25 14:22:57 2016
INET/inet_error: read errno = 10054

我已经提到,这个问题在具有独立本地数据库的不同系统中仍然存在。 DB备份/恢复没用,就像重启Firebird服务一样。只有重新启动 Web 服务器才行。

感谢任何想法...

最佳答案

谢谢,Liam/DrMistry/Mark,

原来是这样。神秘的“50”是连接字符串中的最大池大小。我追查了好几天的错误是我见过的最简单的错误之一——完成数据库连接的行是重复的。像这样:

db.Connect();
db.Connect();

由于只有第二个连接被关闭,每个请求都会将一个连接发送到 limbo,因此连接池很快就被挤满了。如果您有机会在周五晚上发布,就会发生这种情况!

当然,删除两个相同行中的一个解决了这个问题......

关于c# - ASP.NET 网站在恰好 50 个请求后崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40806376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com