这是一个困扰我一段时间的问题,我似乎在网上找不到任何关于这个问题的信息。我有一个运行VMware Hypervisor ESXi的服务器。当我在上面启动虚拟机时,它们通常需要2-3分钟才能启动;时间不长,但不是瞬间。但是,当我查看服务器上的性能日志时,处理器、RAM或磁盘的使用率都不是100%左右;通常它们的平均使用率在60%-80%左右,所以如果服务器有工作要做,为什么不以100%的速度完成呢?
在我看来,在任何特定的时刻,限制性能的组件应该运行在100%。例如,如果我有一个非常慢的硬盘驱动器,那么它几乎总是以100%的速度运行。因此,至少一个区域(处理器、RAM、磁盘和网络)应该始终保持在100%,除非服务器处于完全空闲状态。
为什么不是这种情况?
发布于 2017-01-09 20:23:46
延迟将是一个原因。在“磁盘给我所需的数据之前,我可以做任何其他事情”之间的滞后,而数据返回的时间将使CPU空闲在这段时间。
资源可能会以100%的速度运行,但时间很短。操作系统引导将遵循“处理或决定某事,从磁盘中获取一些东西,在内存中做一些事情,用设备做一些事情”的一般模式,每秒重复多次。因此,当你在2秒内看到一个25%的磁盘时,这可能意味着它以100%的速度运行了0.5秒,然后空闲了剩下的时间。
正如EEAA所指出的那样,多核系统使其变得更加复杂。一个可以执行四个线程的CPU上的单线程软件只能达到25%的全速运行。即使是多线程软件也很少能达到100%,因为数据必须(通常)从硬盘、RAM、缓存到CPU。保持管道满是困难的,而且往往是在可预测的工作负载(如视频编码)中发生的。在这种情况下,操作系统可以观察读取模式并在需要之前检索数据,并将其放入适当的缓存中,例如RAM中的磁盘缓存。
发布于 2017-01-09 20:27:33
你以一种非常简单的方式来思考这个问题,这导致你做出了一些不正确的假设,我会尝试去澄清这些假设。
首先,也是最简单的,在多核系统上,为了了解CPU的使用情况,您必须考虑进程负载是否是多线程的,并且设计它是为了利用多个核。如果情况并非如此,取决于运行的进程组合,您可能永远看不到100%的使用情况。永远不会。
其次,您需要考虑IO设备的性能。例如,您的系统如何知道您的设备能够达到多少IOps?没有。对于您来说,一个更有意义的指标是启动期间的iowait值(在引导过程中可能很难获得)或启动期间的磁盘队列/延迟(这应该更容易从您的管理程序获得)。如果您看到队列或延迟高峰,那么IO设备很可能是导致性能问题的一个因素。
发布于 2017-01-10 16:00:56
我已经使用服务器大约20年了,当一个组件一直运行在100%的时候,这通常不是件好事。
例如,假设您有一个SQL数据库,您不想交换到磁盘,而是希望内存完全用完。
如果您的数据库是24 8GB,而操作系统需要的是8GB,您不希望只为机器分配32 8GB的RAM,那么有许多“事情”可能出错、代码错误、DDOS、大量应用程序使用,谁知道呢,没有任何主程序空间,您怎么知道服务器出了问题?
我们的数据中心有大约2000台服务器,我们希望看到它们在大约75%的CPU和RAM下运行,hhd空间在我们的SAN上,所以这是一个完全不同的蜡球。当CPU或RAM达到85%时,我们也有警报可以告诉我们,当它们达到90%时,可以发出警报来告诉我们。
https://serverfault.com/questions/825163
复制相似问题