跟踪两台服务器之间的 MySQL 连接

跟踪两台服务器之间的 MySQL 连接

我们遇到一个问题,有时服务器运行速度特别慢,但 CPU 从未过高。系统管理员调查了这个问题,并说在任何时候,都存在大量来自服务器 A(运行良好)和服务器 B(出现问题的服务器)的 MySQL 端口的连接。服务器 B 上出现的主要症状是页面加载时间非常慢,主要表现为页面在执行任何操作之前初始挂起,以及与 Shell 的连接速度很慢。值得指出的是,这不是网站/应用程序特有的 - 不是由 Javascript 或类似的东西引起的,因为我们在 3 或 4 个其他相同规格的服务器上运行相同的应用程序,完全没有问题。

我想要做的是尝试追踪 2 台服务器之间这些 MySQL 连接的确切性质。那么,源是什么,目的地是什么,目的是什么。我是否应该启用(当前已禁用的)常规日志?我还可以尝试其他方法吗?两台服务器都运行 CentOS(一台运行 4.8,一台运行 5.5),并且都使用最新版本的 WHM/cPanel 和最新稳定的 PHP/Apache 版本。

谢谢。

答案1

启用日志是个好主意,您还可以使用 MySQL 管理员客户端查看打开的连接并查看遇到问题时它们在做什么。

虽然从您的描述中,我能想到一个非常常见的问题,那就是 DNS 问题,它导致 MySQL 在处理传入连接之前等待 DNS 超时。这通常表现在您所描述的情况下,即应用程序为每个请求打开一个新的 MySQL 连接(而不是使用持久连接池)。

在这里阅读更多相关信息:http://dev.mysql.com/doc/refman/5.0/en/dns.html

(my.cnf 中的 skip_name_resolve 是 IIRC 选项)

答案2

如果您有两个服务器连接,并且“连接”速度很慢,但一旦线程连接,速度就会很快,我怀疑远程主机的 DNS 解析可能会导致问题。

skip-name-resolve

/etc/mysql/my.cnf (或等效文件) 中的 [mysqld] 部分将阻止这些 DNS 查找。

确保您的授权是使用 IP 而不是主机名完成的。

答案3

您还可以尝试侵入性更低的方法 [不启用会带来性能开销的日志]。使用 tcpdump 嗅探流量 [您可以在连接的任一侧或中间执行此操作 - 在某些路由器或具有端口镜像的可管理交换机上]。

tcpdump -s 1600 -w dump.cap -i eth0 host 10.1.2.3 and port 3306

分析 dump.cap - 首先wireshark[此时你应该能够判断是否有大量的并行连接],如果需要的话,看看mk-查询-摘要它可以让您深入了解来自 mysql 日志或 tcpdump 流量的查询。

相关内容