gpt4 book ai didi

mysql - 追踪 MySQL 连接泄漏

转载 作者:IT王子 更新时间:2023-10-29 00:31:22 26 4
gpt4 key购买 nike

我有一个应用程序服务器(linux 机器上的码头 6)托管 15 个个人应用程序(个人 war )。每隔 3 或 4 天,我就会从 nagios 收到有关打开的 TCP 连接数的警报。经检查,我发现这些连接中的绝大多数是到 MySQL 服务器的。

netstat -ntu | grep TIME_WAIT

显示来自应用程序服务器的 MySQL 服务器上有超过 10,000 个连接(注意状态为 TIME_WAIT)。如果我重新启动 jetty,连接将下降到几乎为零。

节目状态中的一些有趣的值:

mysql> show status;
+--------------------------+-----------+
| Variable_name | Value |
+--------------------------+-----------+
| Aborted_clients | 244 |
| Aborted_connects | 695853860 |
| Connections | 697203154 |
| Max_used_connections | 77 |
+--------------------------+-----------+

“show processlist”没有显示任何异常(这是我所期望的,因为大多数连接都是空闲的——记住上面的 TIME_WAIT 状态)。

我有这个服务器的测试环境,但它从来没有任何问题。它显然不会获得太多流量,并且应用程序服务器不断重新启动,因此调试没有太大帮助。我想我可以深入研究每个单独的应用程序并编写一个会影响数据库代码的负载测试,但这会花费很多时间/麻烦。

有什么想法可以追踪正在获取所有这些连接并且从不松手的应用程序吗?

最佳答案

答案似乎是在 [mysqld] 下的 my.cnf 中添加以下条目:

wait_timeout=60
interactive_timeout=60

我在这里找到它(一直在底部):http://community.livejournal.com/mysql/82879.html

终止失效连接的默认等待时间为 22800 秒。验证:

mysql> show variables like 'wait_%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 60 |
+---------------+-------+

编辑:我忘了说,我还在/etc/sysctl.conf 中添加了以下内容:

net.ipv4.tcp_fin_timeout = 15

这应该有助于降低操作系统在重用连接资源之前等待的阈值。

编辑 2:/etc/init.d/mysql reload 不会真正重新加载您的 my.cnf(请参阅下面的链接)

关于mysql - 追踪 MySQL 连接泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2094874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com