从 Web 到 DB 服务器的打开连接数非常多

从 Web 到 DB 服务器的打开连接数非常多

我运行 2 台服务器,1 个 Web 服务器(nginx/php),1 个数据库(mysql)。

Nginx 每秒大约有 1500 个活动进程,mysql 状态平均显示大约有 15 个当前选项连接。

今天我开始跑步:netstat -npt | awk '{print $5}' | grep -v "ffff\|127\.0\.0\.1" | awk -F ':' '{print $1}' | sort -n | uniq -c | sort -n

这表明从我的 Web 服务器到我的数据库服务器 IP 有超过 7000 个活动连接。这似乎有点极端。我不使用 PHP 中的持久连接来连接 Mysql。

知道为什么有这么多开放的连接吗?

答案1

尽管这有点像 stackoverflow'y,但如下所示:

可能是因为你没有在代码中关闭连接。如果是这样,我建议你切换到mysql_pconnect(),或者直接添加mysql_close()到所有请求的 php 页面的末尾

如果所有与 mysql 服务器的连接都处于以下状态:TIME_WAIT,请尝试降低wait_timeoutmysqld 配置中的变量。查看MySQL 文档了解更多信息

更新:正如 ChristopherEvans 指出的那样,您可以直接连接到 mysql 套接字,而不是使用 IP 端点,以避免耗尽本地接口上未使用的端口

答案2

查看连接池 - 这样每个连接就不需要自己的进程了。

http://php.net/manual/en/mysqlnd-ms.pooling.php

不确定这是否会起作用,因为你没有使用持久连接

相关内容