微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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内的泊坞窗图像上测试).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐