Mysql .NET核心API在高负载时暂停

Mysql .NET核心API在高负载时暂停,mysql,entity-framework-core,asp.net-core-webapi,iis-8.5,Mysql,Entity Framework Core,Asp.net Core Webapi,Iis 8.5,我目前正处于优化游戏后端的第一阶段。我正在使用.NETCore2.0、EF和MySQL。目前,所有这些都在本地机器上运行,用于开发。为了进行初始负载测试,我编写了一个小型控制台应用程序,模拟最终客户端使用API的方式。API托管在Windows Server 2012R2计算机上的IIS 8.5下。模拟应用程序在1-2台单独的机器上运行 因此,对于大约100-120个请求/秒,这一切都非常有效。服务器上的CPU负载约为15-30,MySQL服务器上的连接数平均约为100(我已将max_conne

我目前正处于优化游戏后端的第一阶段。我正在使用.NETCore2.0、EF和MySQL。目前,所有这些都在本地机器上运行,用于开发。为了进行初始负载测试,我编写了一个小型控制台应用程序,模拟最终客户端使用API的方式。API托管在Windows Server 2012R2计算机上的IIS 8.5下。模拟应用程序在1-2台单独的机器上运行

因此,对于大约100-120个请求/秒,这一切都非常有效。服务器上的CPU负载约为15-30,MySQL服务器上的连接数平均约为100(我已将max_connections设置为400,但从未接近该值)。响应时间平均远低于100ms。然而,一旦我们输入的请求数字比这个数字高一点,系统似乎就完全停止了间隔。CPU负载下降到<5,同时响应时间急剧上升。所以,这有点像交通堵塞的情况。在暂停期间,MySQL和dotnet exe似乎都在“休息”


我确实意识到我在任何事情上都不接近生产设置,MySQL实例在dev等中。然而,我仍然很好奇这是什么原因造成的。有什么想法吗

这最终听起来好像您在达到某个负载时遇到了死锁风暴。你调试锁了吗?@binarus,tbh我真不知道该怎么做。任何提示?如果您使用InnoDB,请查看
显示引擎InnoDB状态
。您还可以阅读更深入的文章,如。@Binarus。因此,我在其中一个暂停处运行了该命令,并得到了以下输出:其中有任何对您来说很奇怪的内容吗?这最终听起来好像您在达到某个负载时遇到了死锁风暴。你调试锁了吗?@binarus,tbh我真不知道该怎么做。任何提示?如果您使用InnoDB,请查看
显示引擎InnoDB状态
。您还可以阅读更深入的文章,如。@Binarus。因此,我在其中一个暂停处运行了该命令,并得到以下输出:其中有任何您觉得奇怪的内容吗?