两台服务器之间的性能差异

两台服务器之间的性能差异

我的服务器出现了一个很奇怪的问题。我有两台服务器,两台服务器都使用相同的处理器、硬盘和除 RAM 之外的所有配置。第一台服务器使用 16GB DDR3,第二台服务器使用 32GB。第一台服务器的操作系统是 Ubuntu 服务器 10.04.4,第二台服务器的操作系统是 Ubuntu 服务器 11.04。

所以……问题就在这里。我在两个服务器上都运行了相对较重的 php/mysql 应用程序。在第一个服务器上我有 3 个应用程序实例,在第二个服务器上只有一个,但第二个服务器要慢得多。(我三次检查了 apache、mysql 和 php 的配置文件)它们完全相同。当我从本地主机在第一个服务器上运行 ab 时:

ab-n 1000-c 100http://本地页面/

Concurrency Level:      100
Time taken for tests:   5.056 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      26133000 bytes
HTML transferred:       25721000 bytes
Requests per second:    197.77 [#/sec] (mean)
Time per request:       505.642 [ms] (mean)
Time per request:       5.056 [ms] (mean, across all concurrent requests)
Transfer rate:          5047.15 [Kbytes/sec] received

第二个情况有所不同:

Concurrency Level:      100
Time taken for tests:   20.593 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      28437000 bytes
HTML transferred:       28024000 bytes
Requests per second:    48.56 [#/sec] (mean)
Time per request:       2059.296 [ms] (mean)
Time per request:       20.593 [ms] (mean, across all concurrent requests)
Transfer rate:          1348.54 [Kbytes/sec] received

从我所见,第二个服务器(我认为它应该表现更好)却慢得多。我不知道该如何调整才能加快第二个服务器的速度。我知道这是瞎猜,但你能给我一些通用指南来检查哪里出了问题吗?

在第一台服务器上,当我有很多用户时,我的 CPU 和内存使用率很高(正如预期的那样),在第二台服务器上 - 即使有很多用户连接,我的 CPU 使用率也只有 50% 左右,内存使用率也只有 50% 左右。磁盘读取并不密集。最常用的进程是 mysql,根据 ,它在第二台服务器上的 CPU 使用率很少超过 50%,内存使用率也很少超过 5% top。也许现在最好的想法是强制 mysql 使用尽可能多的资源。

答案1

这里有很多可能性,很难知道从哪里开始。你甚至没有运行相同的操作系统,所以一切将会有所不同,以及您正在使用的默认配置。

真的,我唯一能建议的是寻找瓶颈。我倾向于使用未调优的 MySQL 服务器,因为这往往是第一个考虑因素,因为默认的 MySQL 配置严重不符合现代硬件的规格。不过,由于潜在变量的数量非常庞大,因此很难确定。

答案2

我建议以单子模式启动 Apache,并strace使用选项运行它-tt。命令如下所示:

sudo strace -f -tt -T -s 500 -o httpd.trace httpd -X

您正在寻找的是系统调用之间的较大间隙或需要很长时间的系统调用。

根据您对 MySQL 的讨论,我怀疑这可能是 poll() 或多个 poll() 造成的。如果问题出在 MySQL,您可以通过打开慢查询日志、将 long_query_time 设置为较低的值(例如 1 秒或 0.1 秒)并打开 log_queries_not_using_indexes 来找出问题所在。

您还可以使用 Munin、Cacti 或 Zabbix 等监控和绘图工具来查找服务器之间的性能差异。我强烈建议您安装一个。

答案3

50% 的 CPU 限制上限看起来很像 PHP 设置open_basedir

如果不知道您正在运行什么应用程序,我无法提供更多建议。

但请记住,如此短的测试可能只会测试线程创建/生成,而不是应用程序性能本身。由于磁盘缓冲区/缓存,它对 RAM 的占用也会比其他任何东西都多,因此如果一台服务器的内存配置比另一台服务器更优(例如三通道与单通道),它将产生巨大的影响。

在每台机器上运行可启动版本memtest,它会粗略地显示内存带宽。如果一台机器上的内存带宽低得多,那么答案就出来了。

答案4

我建议你研究一下英特尔内存控制器会随着你在机器内安装内存插槽而降低频率这一事实。例如,每个内存通道 (9 个 Dimm) 有 3 个分支,如果你只填充 1 个分支,内存频率将保持在 1.6Ghz,如果你填充所有 Dimm,它将降低到 1.06Ghz。检查一下,只需移除一半内存并在第二台机器上保持相同的配置即可。通常更多并不意味着更好 ;)

相关内容