Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IIS工作进程回收正在定期中断.Net Core 3应用程序中的MySQL客户端_Mysql_Iis_.net Core - Fatal编程技术网

IIS工作进程回收正在定期中断.Net Core 3应用程序中的MySQL客户端

IIS工作进程回收正在定期中断.Net Core 3应用程序中的MySQL客户端,mysql,iis,.net-core,Mysql,Iis,.net Core,工作进程的自动每日IIS回收偶尔(每5-10天)会中断应用程序连接到AWS Aurora(MySQL)服务器的能力 回收后,我们得到这些错误。同一IIS实例中的其他工作进程继续正常工作-所有配置都类似。然后,错误的工作进程将挂起,必须对IIS本身进行重新调整以修复该问题 Oracle MySql.Data.MySqlClient.Net核心类库8.0.20 MySql.Data.MySqlClient.MySqlException(0x80004005):无法连接到任何指定的MySql主机。 -

工作进程的自动每日IIS回收偶尔(每5-10天)会中断应用程序连接到AWS Aurora(MySQL)服务器的能力

回收后,我们得到这些错误。同一IIS实例中的其他工作进程继续正常工作-所有配置都类似。然后,错误的工作进程将挂起,必须对IIS本身进行重新调整以修复该问题

Oracle MySql.Data.MySqlClient.Net核心类库8.0.20

MySql.Data.MySqlClient.MySqlException(0x80004005):无法连接到任何指定的MySql主机。 --->MySql.Data.MySqlClient.MySqlException(0x80004005):超时已过期。操作完成前已过超时时间,或者服务器没有响应。 位于MySql.Data.Common.StreamCreator.gettcstream(MySqlConnectionStringBuilder设置) 在MySql.Data.MySqlClient.NativeDriver.Open()上 在MySql.Data.MySqlClient.NativeDriver.Open()上 在MySql.Data.MySqlClient.Driver.Open()上 位于MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder设置) 在MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()上 在MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()上 在MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()上 在MySql.Data.MySqlClient.MySqlPool.GetConnection()上 在MySql.Data.MySqlClient.MySqlConnection.Open()上

更多信息来自日志。。。 它似乎处理了最初的几个新请求-然后出现了问题-所以可能是巧合-没有与问题对应的事件日志错误

连接池正在使用默认值: 最大池大小100 连接生存期0

附加信息:日志显示在完全崩溃之前,在同一个工作线程中,某些执行是正常的,而其他执行需要很多秒,而不是不到100毫秒。因此,与池相关的某些内容可能会出错,或者实例可能会出错


当循环发生时,肯定会进行调整。

经过更多的研究,我发现我们只是让C#垃圾收集处理SqlConnection对象,而不是在“使用”声明中正确封装对象。这是一个问题,因为在垃圾收集运行并销毁SqlConnection对象之前,基础数据库连接不会返回到连接池。因此,当事情特别繁忙时,我们愚蠢地饿死,尽管有一个装满食物的仓库,因为垃圾收集被推迟,连接没有及时返回到游泳池

现代C#语法允许这种非常简单的声明,当对象超出范围时,它会立即运行析构函数。因此,当对象离开作用域时,系统会立即将底层连接返回池中,以防止应用程序饿死

using MySqlConnection z_connection = new MySqlConnection();
...
using MySqlCommand z_command = z_connection.CreateCommand();
...
using MySqlDataReader z_reader = z_command.ExecuteReader();
...

真正奇怪的是,同一个工作进程中的另一个DLL能够使用MySQL进行连接,而不受问题的影响。如果最大连接足够高,请查看mysqlserver端允许1000个连接的错误日志,并且监控显示max 150 usedi可能会猜到一些网络问题,当发生这种情况时,您可以向代码中添加一些NETWRK测试,以查看是否有其他的Addies是可能的SQL具有自己的论坛,您也可以考虑该供应商的支持。