【问题标题】:Strange issue with several simultaneous connections to MySQL [closed]几个同时连接到 MySQL 的奇怪问题 [关闭]
【发布时间】:2017-11-23 04:23:53
【问题描述】:

我有一个运行 bash 文件的 cron,这个 bash 文件将同时打开大约 1000 个 PHP 脚本,这些 PHP 脚本中的每一个都与 MySQL 建立连接。运行一段时间后,我看到间歇性 MySQL 错误,例如:

SQLSTATE[HY000] [2003] Can't connect to MySQL server on '127.0.0.1' (4)

我发现错误 (4) 是操作系统级别(系统调用中断)。

/var/log/messages/kernel: nf_conntrack: table full, dropping packet留言很多,不知道是不是和这个问题有关。

有人可以帮我吗?

【问题讨论】:

  • 为什么需要并行运行1000个php脚本?
  • 这是一个需要并行运行的大系统。
  • 为什么不能并行运行 100 个,每个做 10 个任务?或者你为什么不把它们错开,让前 100 个运行,当每个终止时另一个开始,直到所有 1000 个都运行,排队?通常有一些替代方法来构建一些东西以避免 1000 个并发任务
  • 您应该在此处的脚本中至少显示 SQL 语句和至少一个示例脚本,以便有人可以帮助您。

标签: php mysql linux-kernel centos


【解决方案1】:

简而言之,您的服务器正忙,您已达到允许的最大连接数。

要解决此问题,请增加最大配置连接数限制

# Temporarily Solution
echo 524288 > /proc/sys/net/netfilter/nf_conntrack_max


# Permanent Solution
# Add following line on /etc/rc.d/rc.local

$ vim /etc/rc.d/rc.local
echo 524288 > /proc/sys/net/netfilter/nf_conntrack_max

$ chmod a+x /etc/rc.d/rc.local

编辑

更简单的方法是 /etc/sysctl.conf 文件。 使用 root 权限打开一个 ssh/term 并添加一行到 /etc/sysctl.conf 文件为: net.netfilter.nf_conntrack_max = 65536 并保存文件,然后输入: sysctl -p

【讨论】:

  • 很酷,谢谢你,我还没有测试,但听起来不错,但我有一个问题,这个错误:SQLSTATE[HY000] [2003] Can't connect to MySQL server on '127.0.0.1 ' (4) 可能是因为我的系统很忙?或者这只会修复内核:nf_conntrack:表已满,丢弃数据包?
  • 如果我执行 echo 524288,我也无法重新启动服务器 > /proc/sys/net/netfilter/nf_conntrack_max 不需要重新启动吗?
  • 看:cat /proc/sys/net/netfilter/nf_conntrack_count 65512 cat /proc/sys/net/netfilter/nf_conntrack_max 65536
  • 是的,因为您的服务器已达到允许的最大连接数,因此无法打开新连接并减少此错误。尝试运行 100 个文件而不是 1000 个文件,看看是否会出现相同的错误,如果不增加连接限制来修复它。问候。
  • 这不需要重启 "echo 524288 > /proc/sys/net/netfilter/nf_conntrack_max"?
猜你喜欢
  • 2010-12-17
  • 2020-05-25
  • 1970-01-01
  • 2010-09-20
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 2016-07-21
相关资源
最近更新 更多