我正在运行两个戴尔 R410服务器位于数据中心的同一机架中(负载均衡器后面)。两者都具有相同的硬件配置,运行 Ubuntu 10.4,安装了相同的软件包并运行相同的 Java Web 服务器(没有其他负载),我发现两者之间存在显着的性能差异。
性能差异最明显体现在两台服务器的平均响应时间上(在 Java 应用程序本身中测量,没有网络延迟):其中一台比另一台快 20-30%,非常一致。
我曾经dstat
弄清楚,是否有更多的上下文切换、IO、交换或其他什么,但我看不出存在差异的原因。在相同的工作负载下(没有交换,几乎没有 IO),一台服务器上的 CPU 使用率和负载更高。
因此,差异似乎主要受 CPU 限制,但虽然使用简单的 CPU 基准测试sysbench
(关闭所有其他负载)确实产生了差异,但差异只有 6%。所以也许这不仅是 CPU,而且还有内存性能。
到目前为止我已经检查过:
- 所有组件的固件修订版(相同)
- BIOS 设置(我使用进行了转储
dmidecode
,但未发现任何差异) - 我比较了一下
/proc/cpuinfo
,没什么区别。 - 我比较了的输出
cpufreq-info
,没有区别。 - Java / JVM 参数(两个系统上的版本和参数相同)
另外,几个月前我完全更换了 RAM,但没有任何影响。
我迷路了。我该怎么做才能弄清楚到底发生了什么?
更新:耶!现在两台服务器的性能都一样了。正如 jim_m_somewhere 在评论中所说,这是“电源 CRAP”设置的问题。在快速服务器上,“电源管理”的 BIOS 选项是“最大性能”,而在另一台服务器上是“活动电源控制器”(戴尔的默认设置)。显然我忘了,我两年前就做了这个设置,而且我并没有在所有服务器上都这样做。感谢大家提供的非常有用的意见!
答案1
两个想法,取决于你想走多远:
交换两台服务器的磁盘,看看速度性能是否停留在硬件上或随着软件而变化。
/opt/dell/toolkit/bin/syscfg -o complete-bios-config.out
比较一下您是否能以某种方式欺骗此包进行安装的输出。
答案2
输出和差异的更多可能性:
- sysctl -a(确保内核可调参数相同)
- cat /proc/interrupts (也许是其他硬件出了问题?)
- ipmitool 传感器列表(远景,但检查更多低水平差异、过热、电压问题等)
答案3
这听起来可能与负载均衡器有关。当您说“相同的工作量”时,您是如何衡量的?
您是否通过单独应用测试负载来直接对每台服务器进行基准测试?
或者您是否将一些负载施加到负载均衡器并查看两台服务器上的结果?
如果您执行后者(通过负载均衡器测量两台服务器上的负载),则您的负载均衡器可能不会在服务器之间均匀地分配工作负载(一对服务器出现 20% 的偏差并不罕见,具体取决于您的负载均衡器如何决定谁获得哪些请求),这会导致一台服务器承担更多负载,从而性能不佳。
(如果您直接对每台服务器进行基准测试,不使用负载平衡器作为中介,并且您已经验证了两个系统之间的每个组件都是相同的(直到制造商修订版),那么我就无从知晓了——我想不出任何其他可衡量的原因来解释其他方面相同的服务器之间出现这种性能差异)
答案4
为什么没有人建议“sysprof”......?
这就是它的设计目的。
或者,嗯,再想想...尝试在 /etc/security/limits.conf 中设置一些限制
都尝试一下。
如果您什么也没得到...那么您很可能遇到了安全问题或物理缺陷。