为什么服务器不能始终运行在最大?

这个问题已经困扰了我一段时间了,我似乎无法find任何网上谈到的东西。 我有一台运行VMware Hypervisor ESXi的服务器。 当我启动虚拟机时,通常需要2-3分钟才能启动; 不是很长的时间,但不是瞬间的。 但是,当我查看服务器上的性能日志时,无论是处理器,RAM还是磁盘使用率都在100%左右。 通常他们平均在60%-80%左右所以,如果服务器有工作要做,为什么不这样做在100%?

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

为什么不是这样呢?

延迟将是一个原因。 “磁盘给我这个数据之前,我可以做任何事情”之间的滞后和数据回来的时间将使CPU空闲的时间。

资源可能运行在100%,但非常短暂。 操作系统启动将遵循“处理或决定某种东西,从磁盘获取某些内容,在内存中执行某些操作,使用某个设备执行某些操作”的一般模式,每秒重复多次。 所以当你在2秒内看到25%的磁盘时,可能意味着它在0.5秒内运行在100%,然后在剩下的时间里闲置。

正如EEAA指出的那样,多核系统使这一点变得更加复杂。 一个可以执行四个线程的CPU上的单个线程软件只能达到全速运行的25%。 即使是multithreading的软件也很难达到100%,因为数据必须从硬盘,RAM,caching到CPU。 保持这个pipe道完整是困难的,而且往往主要发生在video编码等可预测的工作量上。 在这种情况下,操作系统可以观察读取模式并在需要之前检索数据,并将其放入适当的caching中,例如RAM中的磁盘caching。

你正在以一种非常简单的方式来思考这个问题,这会导致你做出一些错误的假设,我会尽力澄清。

首先,也可能最简单的是,在多核系统上,为了理解CPU使用情况,您必须考虑到进程负载是否是multithreading的,并且是为了利用多核而devise的。 如果情况并非如此,取决于正在运行的进程的组合,您可能看不到100%的使用率。 永远。

其次,您需要考虑IO设备的性能。 您的系统如何知道,例如,您的设备有多less个IOPS? 它不。 您需要注意的一个更有意义的指标是在启动过程中(在启动过程中可能很难获得)的iowait值或启动过程中的磁盘队列/延迟(从pipe理程序中应该更容易获得)。 如果您看到队列或延迟峰值,则可能是因为IO设备是导致性能问题的一个因素。

我一直在使用服务器已经有20年了,当一个组件一直运行在100%时,它通常不是一件好事。

例如,假设你有一个SQL数据库,你不想交换到磁盘,而是想完全运行内存不足。

如果你的数据库是24GB,操作系统需要8GB,你不想只为机器分配32GB的内存,有很多“东西”可以出错,坏的代码,DDOS,沉重的应用程序使用,谁知道,没有任何头部空间你怎么知道服务器有麻烦?

我们在数据中心有大约2000台服务器,我们希望看到它们都在75%左右的CPU和内存上运行,高速存储器位于我们的SAN上,因此是一个完全不同的蜡烛球。 我们也有告诉我们什么时候他们打85%的CPU或RAM,并告诉我们什么时候达到90%。