1

我拼命想弄清楚这里发生了什么,但在任何地方都没有看到这个特殊问题。我已经“继承”了数据库服务器(远程,在数据仓库中,由 ssh 访问)的管理(如在其中,不是我自己构建的),其中一些 php 守护程序在充当数据爬虫的 Linux 服务器上运行,插入并将相对稳定的信息处理到mysql中。

几天前,服务器崩溃并重新启动。我登录并重新启动了 mysql 服务器和爬虫,不再考虑它。一天半后,mysql服务器停止工作,我无法诊断它,因为我无法登录它,也没有响应“/etc/init.d/mysql stop”或其变体。根据日志文件,它经常抛出错误(每 4 分 16 秒一次),并说它打开的文件处理程序太多。然而,当我关闭爬虫时,我可以再次登录,但 mysql 不断抛出错误。我检查了 lsof,它显示了很多带有“无法识别协议”错误的打开套接字。

mysqld 28843 mysql 1990u sock 0,4 2856488 无法识别协议

mysqld 28843 mysql 1989u sock 0,4 2857220 无法识别协议

^成千上万的这些行

还以为是爬虫干的事情,重启了mysql,失败的socket就消失了。但是我很惊讶地看到 mysql 不断打开新的,即使爬虫没有运行。它非常有规律地这样做,每分钟大约有两个新的失败套接字,无论爬虫是否处于活动状态。我增加了允许 mysql 购买时间的最大文件处理程序数量,但我显然在寻找诊断和永久解决方案。

我在论坛上发现的此类错误(套接字泄漏)的所有描述似乎都是关于您自己的软件泄漏,而不是关闭其套接字。但这似乎是 mysql 本身在做这件事,并且从它工作正常时开始,任何代码都没有变化,只是服务器崩溃并重新启动。

有任何想法吗?

4

0 回答 0