python – Azure VM似乎杀死了长时间运行的MySql查询

在使用MySql(aurora)时,我开始注意到奇怪的查询丢失,工作人员只是永远挂起.经过一些调查后,似乎在AWS中运行的相同代码是正常的,但在Azure上,它只是挂起,永远!

似乎这样做的原因是Azure只是杀死空闲的连接(如长时间运行的查询).请注意,我可以在一个甚至没有负载均衡器的VM上重现这一点.

这可以通过以下日期和&&amp ;; time MysqL -h $SERVER -u $USER -D mydb -p $PASS -e“SELECT SLEEP(260);”

请注意,我用240,250和260测试它死了.
但不只是死,挂,永远!看起来Azure甚至懒得告诉套接字死机,因此MysqL客户端挂起.

我们有从NodeJs和Python运行的查询,因此我需要一个可以在两者中运行的解决方案.

在这里一个很好的例子:https://imgur.com/gallery/FCV8ZWb(注意我必须在另一个会话中杀死MysqL才能实际发布)

解决方法:

经过一些研究后,我找到了一个应该始终有效的低级解决方法,我将一个lib注入任何使用LD_PRELOAD使所有套接字保持活动的二进制文件.我注入的lib是libdontdie,一个较旧的lib的分支:libkeepalive.

构建lib之后我运行:
日期&& time DD_DEBUG = 1 DD_TCP_KEEPALIVE_TIME = 4 DD_TCP_KEEPALIVE_INTVL = 5 DD_TCP_KEEPALIVE_PROBES = 6 LD_PRELOAD = /usr/lib / libdontdie.so MysqL -h $SERVER -u $USER -D mydb -p $PASS -e“SELECT SLEEP(300);”

它按预期工作(在天蓝色的VM和AKS内的泊坞窗图像上测试).

相关文章

Microsoft云包括了Azure、PowerPlatform、Microsoft365、Git...
《WindowsAzurePlatform系列文章目录》 我们在使用AzureAPI...
微软免费使用一年的Azure虚拟机,默认提供了一个64G的磁盘,...
上篇请访问这里做一个能对标阿里云的前端APM工具(上)样本多...
一年一度的MicrosoftBuild终于来了,带来了非常非常多的新技...