我们有一个运行 Ubuntu 10.04 服务器的 768mb RAM 小型 VPS,托管一些低流量网站和一个Etherpad例如。我们已经运行此设置 6 个多月了,最近才开始遇到 MySQL 服务器问题(或者至少是注意到了)。
我们的 DB 驱动网站和应用程序上一直出现随机 MySQL 连接错误,这些错误似乎会在大约 3 到 5 分钟内自然解决,在此期间服务器无响应(几乎无法使用 SSH 登录)。发生这种情况时,重新启动 Apache 似乎可以解决问题,但不使用 MySQL 的东西似乎不会受到影响。
我有足够的服务器设置经验,在一切正常时保持服务器运行,但我不是系统管理员,虽然我对 Linux 相当熟悉,但我不知道从哪里开始寻找这个问题。我看过有关 iotop 的东西,我们安装了 Munin 和我们的 VPS 提供商 (Linode) 监控工具,但我不知道如何从数据中找出罪魁祸首。
如何开始诊断这样的问题,您认为其根本原因是什么?
谢谢 !
[更新]
这是我得到的输出vmstat 5
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 1 262136 54516 3052 54844 0 0 0 0 0 0 1 0 98 1
0 3 262136 9404 3324 96600 0 0 8167 18 4104 2284 3 2 70 25
0 3 262136 22492 3232 81932 0 0 3651 8 1646 998 1 1 51 48
1 0 262136 9540 3392 93048 6 2 4130 21 2047 1089 1 1 69 30
2 0 262136 9804 3392 90996 0 0 2517 2 5527 3171 5 5 75 15
2 0 262136 10036 3400 91000 0 0 1 10 7136 4402 7 8 85 0
0 0 262136 10112 3544 91328 0 0 94 3 3319 1991 3 4 92 2
0 0 262136 9720 3560 92144 0 0 165 30 272 312 0 0 99 1
0 0 262136 10008 3560 92164 0 0 4 1 252 305 0 0 100 0
0 0 262136 10852 3624 92584 0 0 99 0 302 338 0 0 87 13
0 1 262136 10728 3636 92724 0 0 28 5 245 307 0 0 97 3
0 0 262136 10480 3652 93124 0 0 81 1 270 315 0 0 94 6
答案1
很酷,您已经设置了监控,这已经完成了 80% 的工作。除此之外,请尝试在屏幕会话中运行“vmstat 5”以查看发生了什么。
可能的原因:
- 系统可能缺少CPU 周期MySQL 无法处理这些连接尝试。您的 CPU 使用率如何?如果您的服务器非常繁忙,并且没有足够的 CPU 进程,则从您的 Web 服务器到 DB 的连接将超时。
- 内存不足,交换过多。查看您正在执行多少交换操作。如果您看到大量非零交换“si”和“so”,则说明您过于依赖交换,这会降低性能并使 MySQL 需要很长时间来分配内存以处理新连接。
- 磁盘性能低下。您可以使用“iostat”进行诊断。请参阅“iowait”列。这是 VPS 中的常见问题,但它本身不会导致 DB 连接超时。不过,它可能会使上面解释的过度交换问题更加严重。
- 最后但同样重要的是,检查您的最大同时连接数设置(最大连接数) 在您的 mysql 服务器上。您没有提供详细的错误消息,但如果您检查您的 mysql 驱动程序连接(在 PHP 上,或其他任何平台上),您会看到“连接过多”。但老实说,我不认为这会导致您的整个服务器冻结,所以我不认为这是这里的问题。
我希望这有帮助。