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

我使用Linode来托pipe一个名为“Shopp”的电子商务插件的WordPress博客。

我几天前从一个以前的共享主机帐户(资源比Linode VPS更less)移动了该网站。

这个问题在以前的主机上没有发生。

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

我已经打开了mysql的慢查询日志,看看我能得到任何线索,但不幸的是所有的查询logging似乎正常(像'select列,从table1其中id = 1',另一个例子,引起了我的眼睛在慢查询日志是'设置名称utf8')。

我怎样才能调查是什么造成这个问题? 有没有一种方法可以肯定地知道问题来自数据库,或者可能是服务器上的一个PHP文件?

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

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

找出这样的问题是最容易的,当服务器有一个不好的时刻。 如果可以将它钉在CPU,内存或磁盘上,它会有所帮助。

  • 安装并运行htop。 检查右上angular的平均负荷数字。 按CPU%sorting(按F6),然后按MEM%查看是否有exception值。
  • 如果你有一个exception,它是一个Apache / httpd进程运行“链接http://本地主机/服务器状态 ”,看看是否可以找出哪个网页导致问题
  • 如果这样做不起作用,那么“strace -p PID”就会出现stream浪的过程,看看你是否可以弄清楚它试图访问哪些资源以及它可能在做什么。
  • 运行vmstat 1,看最右边的“wa”列。 那就是IO等待,如果是20或30以上,IO就是最有可能的问题。

这听起来像内存是问题,虽然。 也许新主机上的mysqlconfiguration太过分了? 确保你的key_buffer和innodb_buffer_pool_size组合不是你的内存太多,尤其是因为它不是一个专用的数据库机器,而且apache需要相当数量的内存来继续提供httpd进程。 Mysql会随着时间的推移使用你所允许的每一个内存位,所以可能需要10-11个小时才能填满这些缓冲区。

我也会在apache中检查你的keepalive设置,这些会对内存使用量产生巨大的影响。 我通常设置很低或完全closures。

在这个网站上有很多QA资源供你select,首先你需要找出你实际的限制器是什么,你提到SWAP,所以我猜你有一个内存问题。

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

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