我正在开发一个Symfony 3.1应用程序,它基本上是将作业消息放在RabbitMQ队列中,并使用监督程序,我产生了一些使用RabbitMQ消息的进程,并在Symfony中进行管理。消费者的工作是解码消息并创建一个新的Symfony\Bundle\FrameworkBundle\Console\Application
,注入相同的内核并执行一个Symfony命令,该命令具有读/写数据库操作。
问题开始了。通常,同时,我通常会让派生的4个工作进程来使用消息。同时,所有消费者都对不同的数据执行相同的数据库操作,因此基本上所有进程都执行相同的Symfony RabbitMQ消费者。有时它工作得很好,没有任何问题,但有时MySQL返回错误"MySQL server has gone away"
,通常为了解决这个问题,我必须重新启动Supervisor服务,这样工作进程就会被杀死并再次产生。通常在重新启动后,它可以正常工作几个小时,但它的模式确实不可预测。
这不是MySQL连接超时,因为我确信它们是小操作,我已经增加了MySQL的connect_timeout
。我还增加了wait_timeout
到2天,所以基本上,这并没有解决问题。
3条答案
按热度按时间e3bfsja21#
我们面临着一个类似的问题,通过命令行处理应用程序,试图调整mysql所有变量都在适当的范围内,但'Mysql消失错误'不断弹出。
对我们来说唯一有效的修复方法是在应用程序中的任何查询之前ping连接,并关闭挂起和不活动的连接,然后创建一个新的连接。
字符串
教义库中也提到:https://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Connection.php#L1649
pxiryf3j2#
它可能是其中的一些问题。
1.可以从配置max_allowed_packet max_allowed_packet中增加的最大数据包大小
1.或者它可以是超时问题,因为你打开php进程,它永远不会结束,你可以实现一些try catch块,当你有一个mysql错误时,创建一个新的mysql连接。
lbsnaicq3#
我们在处理一个应用程序时遇到了类似的问题。此错误可能有各种原因。