Ubuntu 服务器上间歇性出现 MySQL 数据库连接错误

Ubuntu 服务器上间歇性出现 MySQL 数据库连接错误

我们有一个运行 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 上,或其他任何平台上),您会看到“连接过多”。但老实说,我不认为这会导致您的整个服务器冻结,所以我不认为这是这里的问题。

我希望这有帮助。

相关内容