![如果还有 RAM 可用,为什么所有核心都达到最大容量?](https://linux22.com/image/1583718/%E5%A6%82%E6%9E%9C%E8%BF%98%E6%9C%89%20RAM%20%E5%8F%AF%E7%94%A8%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E6%89%80%E6%9C%89%E6%A0%B8%E5%BF%83%E9%83%BD%E8%BE%BE%E5%88%B0%E6%9C%80%E5%A4%A7%E5%AE%B9%E9%87%8F%EF%BC%9F.png)
我在配备 64GB RAM 的 i7 上运行常规 Python 程序。我有很多重复,因此我同时运行了大约 10 个此程序实例。查看系统资源(在 ubuntu 18.04 上),我所有 8 个内核都以 100% 的容量运行,但我仍然只使用了 22GB RAM。我很好奇,如果还有 RAM 可用,为什么所有内核都处于最大容量?
答案1
我认为您的程序正在使用所有可用的处理能力 - 这就是所有核心都达到 100% 的原因。但这并不意味着必须使用所有 RAM。Ram 不是 CPU 的替代品,而是内存。也许您的程序只是不需要更多内存 - 它不必一直使用所有内存。
答案2
在正常情况下,核心平台的 CPU 受到时钟频率(取决于散热)、每时钟周期指令数(ipc,与总线宽度有关)的限制,https://en.wikipedia.org/wiki/Instructions_per_cycle)因此管道支持主要(https://en.wikipedia.org/wiki/Instruction_pipelining)。如果 CPU 的使用率低于 100%,那么内存通道能够以多快的速度支持通过数据进行指令的管道非常重要。
在 Ubuntu 18.04 上,您可以安装 netdata 系统记录器,它会在 localhost:19999 上的 Web 浏览器上以详细图表的形式显示 CPU 和内存使用情况之间的关系。在运行 Python 程序时,您可以看到该程序在一段时间内(默认约 1/4 小时)需要多少 CPU 利用率和内存使用量。
虚拟化或数据库管理可以作为高内存使用率和不同 CPU 利用率的例子。