为什么服务器不总是以最大速度运行?


12

这个问题困扰了我一段时间,而且我似乎无法在网上找到任何有关此问题的信息。我有一台运行VMware Hypervisor ESXi的服务器。当我在其上启动虚拟机时,它们通常需要2-3分钟才能启动。时间不是很长,但不是瞬间。但是,当我查看服务器上的性能日志时,处理器,RAM或磁盘使用率均未达到100%左右。通常,它们平均大约为60%-80%,因此,如果服务器有工作要做,为什么不以100%的价格工作呢?

在我看来,在任何时候,限制性能的组件都应以100%的速度运行。例如,如果我的硬盘驱动器非常慢,那么它几乎应该始终以100%的速度运行。因此,除非服务器完全处于空闲状态,否则至少一个区域(处理器,RAM,磁盘和网络)应始终为100%。

为什么不这样呢?


不基于systemd的旧版Linux发行版无法有效地并行化启动。* BSD仍然受此困扰。引导一个现代的Linux发行版,看看它有什么不同。
迈克尔汉普顿

Answers:


18

延迟将是原因之一。在“磁盘将我需要的数据提供给我之前,我可以做其他任何事情”与返回数据的时间之间的时间差将使CPU在该时间处于空闲状态。

资源可能确实以100%的速度运行,但是时间很短。操作系统引导将遵循“处理或决定某件事,从磁盘取某事,在内存中做某事,用设备做某事”的一般模式,每秒重复多次。因此,当您在2秒钟内看到磁盘以25%的速度运行时,这可能意味着该磁盘以100%的速度运行了0.5秒,然后在其余时间保持空闲。

正如EEAA指出的那样,多核系统使其变得更加复杂。CPU上可以执行四个线程的单线程软件只能全速运行25%。甚至多线程软件也很少会达到100%,因为数据必须(通常)从硬盘驱动器流到RAM,缓存和CPU。保持管道满载是困难的,并且通常发生在可预测的工作负载(例如视频编码)上。在这种情况下,操作系统可以观察读取模式并在需要之前检索数据,然后将其放入适当的缓存中,例如RAM中的磁盘缓存。


16

您正在以一种非常简单的方式考虑此问题,这导致您做出一些不正确的假设,我将尝试加以澄清。

首先,并且可能最简单地,在多核系统上,为了了解CPU使用率,您必须考虑进程负载是否是多线程的,并设计为利用多核。如果不是这种情况,则取决于所运行的进程的混合,您可能永远不会看到100%的使用率。曾经

其次,您需要考虑IO设备的性能。例如,您的系统如何知道您的设备能够支持多少IOps?没有。您需要观察的更有意义的指标是iowait引导过程中的值(在引导过程中可能很难获得)或引导过程中的磁盘队列/延迟(应从管理程序中更容易获得)。如果看到队列或延迟高峰,则可能是您的IO设备导致了性能问题。


11

我从事服务器工作已有20年了,当组件始终以100%的速度运行时,通常这不是一件好事。

例如,假设您有一个SQL数据库,您不想交换到磁盘,而是想完全用尽内存。

如果您的数据库为24GB,而操作系统需要8GB,则您不希望仅为计算机分配32GB的RAM,那么很多“事情”可能会出错,错误的代码,DDOS,大量的应用程序使用,谁知道,没有足够的余地,您怎么知道服务器出了故障?

我们的数据中心中有大约2000台服务器,我们希望看到它们全部以大约75%的CPU和RAM运行,hdd空间在我们的SAN上,所以这是完全不同的。当它们达到85%的CPU或RAM时,我们也会有警报告诉我们,而当它们达到90%的时候,我们也会有警报告诉我们。


我认为您在这里有些偏离轨道了。我说过我正在运行虚拟机,因此存在一个与数据库服务器完全不同的一致负载,该数据库服务器在获取请求和分配资源时运行。我更关心的是性能限制因素是什么,而不是那些资源的分配方式。但是,谢谢您的回答!
Kernel Stearns
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.