在同一个应用程序中,但是在不同的服

我们有两个GoDaddy服务器存储Facebook应用程序。 一个是testing,另一个是生产。 两者都有相同的代码,但testing服务器响应速度更快。

这两种服务器configuration是:

  • 操作系统:Centos 5.3
  • PHP:5.3.1
  • MySQL:5.5.21

而且他们都有相同的硬件。

我们试图追踪这个问题,首先我们通过监视我们的php&mysql使用率百分比的用法来testing我们的代码。 我们已经pipe理不超过10%。 我提醒两台服务器都有相同的代码。

其次,我们已经将生产中的MySQLconfiguration文件更改为与testing服务器完全相同,但是这也没有帮助。

当我们用firebugtesting我们的应用程序时,我们在一些.php文件中发现了很多延迟。 某些.php文件请求在testing服务器上需要2秒,在生产服务器上需要13秒。 由于这种滞后只在生产服务器上持续存在,所以我们比较了phpInfo()结果的结果。

这里可以看到不同之处:

与phpinfo()的结果不同

每个区别都以这种forms列出:

 ******Testing //A result from our testing server (Empty means not exist) ******Production //A result from our production server (the SLOW one) HTTP_CACHE_CONTROL 

你看到任何可能导致性能问题的差异吗?

谢谢。

两台服务器都是最新的吗? 至less在两个盒子之间的PHP-Memcached版本有明显的差异。

如果没有,可能会有硬件问题? 在某些情况下,损坏的RAIDarrays或类似物可能会导致速度放慢。

debugging速度降低的一个可能的方法是在strace下运行一个示例PHP脚本(显示两个服务器之间速度差异的脚本),然后解决什么时候发生速度下降的问题。

这听起来很像locking。 你在使用MyISAM表吗? 对MyISAM表的写查询会locking整个表,这将导致任何并发读取请求必须等到写入完成。 由于服务器之间的唯一区别是并发请求的数量,这是我的第一个猜测。 InnoDB具有行级locking写入function,使其成为这种读/写工作负载的更好select。

MySQL查询caching也可以是一个locking点,因为每次对该表执行写操作时,必须刷新某个特定表的所有条目。 较大的查询caching并不总是更好 ,可能会导致大幅减速。

你有你的MySQL慢日志打开? 您可能还需要添加log_queries_not_using_indexes 。 磁盘争用将是我的第二个猜测。 vmstat 5 5的输出应该有助于确定这一点。 (和vmstat ,忽略第一行。)如果这是你的问题,你可以通过以下方式解决:

  1. 增加更多的RAM。
  2. 使用速度更快的磁盘,例如15k RPM或SSD。
  3. 更改您的应用程序,以减less写入。
  4. caching你的读取其他地方,如memcached。

这可能也值得在你的MySQL服务器上运行mysqltuner.pl 。 要得到它,只需键入wget mysqltuner.pl

你有没有联系GoDaddy这个问题?

如果您确定Web堆栈是相同的(MySQLconfiguration/ Apacheconfiguration/ PHP /源代码),那么显然存在一个configuration问题,超出您的范围(networking/磁盘/虚拟化层,假设他们正在使用虚拟化在GoDaddy;不熟悉他们的虚拟私人服务器产品)。

如果它只是共享主机(甚至可能是VPS,谁知道;再联系Go Daddy),你永远不知道你会得到什么框:我有一个经销商帐户与另一个大的托pipe服务提供商,我可以告诉,IP我将得到一个“狗”的服务器,其中有一个帐户的大量(做在/家里的子目录计数certificate)。 实际上,一般来说,共享主机是非常明显的性能明智的:我真的只用于3页的宣传册的网站。