如何找到两个相同的Ubuntu服务器之间的性能差异巨大的原因?


9

我在数据中心的同一机架(负载均衡器后面)中运行两台Dell R410服务器。两者都具有相同的硬件配置,运行Ubuntu 10.4,已安装相同的程序包并运行相同的Java Web服务器(没有其他负载),我发现两者之间的性能差异很大。

两台服务器的平均响应时间之间的性能差异最为明显(在Java应用本身中进行了测量,没有网络延迟):其中一台比另一台快20-30%,而且始终如一。
我曾经dstat弄清楚是否还有更多的上下文切换,IO,交换或其他任何东西,但是我看不出有什么区别。在相同的工作负载下(无交换,几乎没有IO),一台服务器上的CPU使用率和负载更高。

因此,差异似乎主要是受CPU限制的,但是使用sysbench(关闭所有其他负载)的简单cpu基准测试确实产生了差异,但仅为6%。因此,也许不仅是CPU,而且还有内存性能。

到目前为止,我已经检查了:

  • 所有组件的固件版本(相同)
  • BIOS设置(我使用进行了转储dmidecode,没有任何区别)
  • 我比较了/proc/cpuinfo,没有区别。
  • 我比较了的输出cpufreq-info,没有区别。
  • Java / JVM参数(两个系统上的版本和参数相同)

另外,几个月前我完全更换了RAM,没有任何效果。

我搞不清楚了。我该怎么做才能解决?

更新:是的!现在两台服务器的性能均相等。这是“ power CRAP”设置,即jim_m_somewhere在注释中将其命名。BIOS的“电源管理”选项位于快速服务器上的“最高性能”上,而另一服务器位于“活动电源控制器”(Dell的默认设置)上。显然,我忘记了两年前进行的设置,但并不是在所有服务器上都这样做。感谢大家的宝贵帮助!


2
您的RAM可能有故障。如果您的应用程序网络繁忙,则可能是网络堆栈中的任何内容。
凯尔2012年

2
您可以在BIOS中比较“高级CPU设置”吗?-也许可以运行ipmitool命令来这样做?RAM上的速度是否相同?我认为您已经检查了磁盘/控制器上是否有备用电池...只是想“大声” ...两个盒子上的RAM是否相同?已注册还是未注册... AH ...您是否已检查两台服务器上的“ power CRAP”-ACPI是否均已关闭?
jim_m_somewhere 2012年

2
如果它们正在提供相同的数据,则从防火墙或DNS进行任何负载平衡吗?网络统计数据是什么样的?java配置也一样吗?java堆大小相同吗?在这黑暗中射击。
au_stan 2012年

2
软件配置真的相同吗?例如,是否在一个上启用了AppArmor,而在另一个上禁用了?还要检查“ dmesg”是否有错误。
安东·科恩

1
您是否检查过网络的有线电缆,交换机上的端口,还看到了iops或检查了HDD的运行状况?

Answers:


6

有两个想法,具体取决于您要走多远:

  1. 交换两台服务器的磁盘,看看速度性能是保持在硬件上还是随软件一起移动。

  2. 比较/opt/dell/toolkit/bin/syscfg -o complete-bios-config.out您是否可以欺骗该软件包进行安装的输出。


dstat的输出非常清楚地表明,当没有IO发生时,性能也会发生差异。在Ubuntu 10.4上安装syscfg确实很棘手。我确实已经比较了dmidecode的输出,sysctl会显示更多吗?也许对每个BIOS屏幕的照片进行比较比较麻烦。我可以试试看。
the.duckman 2012年

1
通过交换磁盘,我并不是要研究IO,而是要研究导致缓慢的软件(错误)配置(例如,奇怪的内核参数)。
chutz

3

输出和比较的更多可能性:

  • sysctl -a(确保内核可调参数相同)
  • cat / proc / interrupts(也许还有其他一些硬件混乱了吗?)
  • ipmitool传感器列表(远射,但请检查更多的低电平差异,过热,电压问题等)

不幸的是,谢谢,这些命令的输出没有明显差异。
the.duckman 2012年

2
如果使用software比较文件,所有差异都是显而易见的。请参考以下问题:如何区分两个配置文件?
天鹰

3

听起来可能与我有关的负载均衡器。当您说“相同的工作量”时,您如何衡量?
您是否通过单独应用测试负载来直接对每个服务器进行基准测试?
还是您要向负载均衡器施加一些负载并查看两台服务器上的结果?

如果您要进行后者(通过负载平衡器测量放置在两台服务器上的负载),则负载平衡器可能无法在服务器之间平均分配负载(一对服务器偏斜20%并不少见,具体取决于您的负载均衡器会决定谁收到请求),这将导致一台服务器承担更多的负载,从而导致性能下降。

(如果您直接使用隔离基准测试每个服务器,而没有使用负载均衡器作为中介,并且您已经验证了两个系统之间每个组件都是相同的(根据制造商的修订),那么我很茫然-对于其他相同服务器之间的这种性能差异,我无法想到任何其他可衡量的原因)


没错,我们的负载均衡器也可以做到这一点-它实际上是一项功能。因此,我以多种方式进行了评估,是的,我什至在每个服务器上分别“重播”了一次相同的请求。但是,即使只是将所有实时流量都放在单个服务器上一段时间,并比较每个服务器准备响应所需的时间,也会产生与更复杂的设置相同的结果。
the.duckman 2012年

嗯-在这种情况下,我被正式绊倒了-如果一切都完全相同(并且我们似乎已经很好地确认了这一点),那么您应该在合理的性能数字误差范围内(±5-7%)-您我看到的变化超过原来的两倍,我不知道为什么:-/
voretaq7

3

尝试一些性能分析工具,例如perf的系统性能分析或VisualVM的 Java性能分析。

使用perf,您可以通过PID来配置正在运行的Java进程,也可以通过基准来配置。查看两个系统,查看慢速系统在哪里花费时间。

apt-get install linux-tools-common linux-tools

然后是这样的:

perf record -e cpu-cycles -p <pid>

要么

perf record -a -g <benchmark command>

然后

perf report

关于系统如何执行不同的一些想法:

环境:空气温度或气流是否不同?他们在架子上吗?我已经看到,由于振动,系统在不同的机架位置上会有不同的性能。每个机架的振动程度不同。考虑到您说几乎没有使用I / O,这不太可能。但是我看到由于机架部分的振动,磁盘的写入速度减慢到2MB /秒。

硬件故障:任何硬件都可能有故障。使用配置文件可以查看速度较慢。可能是CPU或芯片组损坏,散热器未正确安装,风扇失衡导致振动,风扇出现故障,甚至是电源模块损坏。尝试交换易于交换的内容。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.