服务器 I/O 攀升、带宽峰值、服务器锁定,从哪里开始?

服务器 I/O 攀升、带宽峰值、服务器锁定,从哪里开始?

我正在使用 Linode 来托管一个带有名为“Shopp”的电子商务插件的 Wordpress 博客。

几天前,我刚刚将网站从以前的共享托管帐户(资源比 Linode VPS 少)移出。

之前的主机上没有出现过该问题。

每隔几个小时(大约 10-11 小时,不定),我可以看到带宽峰值(“正常”流量约为 400k-600k/s)为 1.1mb/s。同时,我可以看到 I/O 和 SWAP 也达到 10k-20k 之间的峰值,这导致服务器基本上锁定。它会锁定大约 30 到 40 分钟,或者直到我重新启动它。

我已经打开了 mysql 慢查询日志,看看是否可以从中找到任何线索,但不幸的是,它记录的所有查询似乎都很正常(例如“从 table1 中选择列,其中 id=1”,慢查询日志中引起我注意的另一个例子是“设置名称 utf8”)。

我该如何调查导致此问题的原因?有没有办法知道一定如果问题源于数据库,或者可能是服务器上的某个 php 文件?

从这里继续下去的最佳方法是什么?

PS:运行 Ubuntu 10.04,32 位,最新的 mysql/php/apache2 并使用 Linode 1024

答案1

当服务器出现问题时,找出此类问题最容易。如果能将其归咎于 CPU、内存或磁盘,会很有帮助。

  • 安装并运行 htop。检查右上角的平均负载数字。按 CPU% 和 MEM% 排序(按 F6),看看是否有任何异常值。
  • 如果你有一个异常值,它是一个 apache/httpd 进程,运行“链接http://localhost/服务器状态“看看能否找出哪个页面导致了问题
  • 如果这没有帮助,请“strace -p PID”该杂散进程,看看是否可以找出它正在尝试访问哪些资源以及它可能正在做什么。
  • 运行 vmstat 1,查看最右边的“wa”列。这是 IO 等待,如果超过 20 或 30,则很可能是 IO 问题。

不过,内存似乎确实是问题所在。也许新主机上的 mysql 配置过于激进?请确保 key_buffer 和 innodb_buffer_pool_size 组合不会占用太多 RAM,尤其是因为它不是专用的 DB 机器,而 apache 需要大量内存才能继续提供 httpd 进程。Mysql 会随着时间的推移使用您允许的每一点内存,因此这些缓冲区可能需要 10-11 小时才能填满。

我也会检查 apache 中的 keepalive 设置,这些设置会对内存使用产生巨大影响。我通常会将其设置得非常低或完全关闭。

答案2

该站点上有大量 QA 资源可供使用,首先您需要找出您的实际限制因素,您提到了 SWAP,所以我猜您遇到了内存问题。

为了获得更好的帮助,您需要为可能想要提供帮助的人提供一些诊断信息,例如:top初学者的输出。

这听起来可能不对,但您可以通过调整 Apache/MySQL 安装在硬件限制内更好地工作来提高性能和行为。

相关内容