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

我的服务器真的很奇怪 我有两台服务器,都有相同的处理器,硬盘和其他除RAM外的其他东西。 第一块有16GB DDR3,第二块是32GB。 第一个是Ubuntu服务器10.04.4,第二个是Ubuntu服务器11.04。

所以..这是问题。 我有两个相对较重的PHP / MySQL应用程序运行。 在第一个我有三个应用程序的实例,在第二个只有一个,但第二个服务器是慢得多。 (我`trive检查configuration文件的Apache,MySQL和PHP),他们是完全一样的。 当我从本地主机运行第一个ab时:

ab -n 1000 -c 100 http:// local_page /

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 

从我看到的第二个,哪一个应该performance得更好,要慢得多。 我没有什么更多的想法来调整,以加快第二台服务器。 我知道它是在黑暗中被枪杀的,但是你能指点我一些一般的指南来检查什么是错的?

在第一台服务器上,当我有很多用户时,我有很高的CPU和内存使用率(如预期的那样),第二台服务器 – 即使连接了很多用户,我也有大约50%的CPU使用率,大约50%使用RAM。 磁盘读取不密集。 最常用的进程是mysql,在第二台服务器上很less超过50%cpu使用率和5%ram使用率。 也许现在最好的办法是强制mysql使用尽可能多的资源。

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

真的,我可以build议的是打猎的瓶颈 。 我倾向于一个未经过调整的MySQL服务器,因为这往往是第一个调用点,因为默认的MySQLconfiguration对于现代硬件来说是非常欠缺的。 但是,确实很难说,因为潜在variables的数量是如此巨大。

我会build议在独生子模式下启动Apache并使用-tt选项在其上运行strace 。 该命令看起来像这样:

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

你正在寻找的是系统调用或需要很长时间的系统调用之间的巨大差距。

基于你对MySQL的讨论,我怀疑这将是一个民意调查(或多个)。 如果问题原来是MySQL,那么可以通过打开慢查询日志,将long_query_time设置为低1秒或0.1秒,然后打开log_queries_not_using_indexes来找出导致问题的原因。

您还可以通过使用像Munin,Cacti或Zabbix这样的监视和绘图工具来发现服务器性能之间的差异。 我强烈build议安装一个,如果这些。

50%的CPU限制看起来非常像PHP设置open_basedir

不知道你正在运行什么应用程序,我不能再build议。

但请记住,这样一个简短的testing可能只会testing线程创build/产卵而不是应用性能本身。 由于磁盘caching/caching的原因,它也会比内存更多,所以如果你在一台服务器上有更优化的内存configuration(比如三通道和单通道),将会产生巨大的影响。

在每台机器上运行memtest的启动版本,它会给你一个内存带宽的粗略指示。 如果它在一台机器上低得多,那就有你的答案。

我build议你看看这个事实,即英特尔内存控制器缩小频率,因为你适合机器内的内存插槽。 作为一个例子,如果你只填充1个分支,每个内存通道有3个分支(9个Dimms),如果你填充所有的内存,它将被降低到1.06Ghz,内存频率将保持在1.6Ghz。 检查一下,只要删除一半的内存,并保持相同的configuration在secod机器上。 往往更多并不意味着更好;)