我们遇到一个问题,有时服务器运行速度特别慢,但 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 而不是主机名完成的。