AWS 没有提供广告宣传的 RAM

AWS 没有提供广告宣传的 RAM

我有两个 t3.micro AWS 实例。一个位于 us-east-1a,另一个位于 us-east-1b。每台机器都应该有 1GB 的内存。在 us-east-1a 的第一个机器上,我看到:

[root@ip-10-0-0-32 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            663         392          78          24         192         118
Swap:          4095         704        3391
[root@ip-10-0-0-32 ~]# 

在 us-east-1b 的盒子上我看到

Swap:             0           0           0
[root@ip-10-0-1-32 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            780         516          72          80         191          71
Swap:             0           0           0
[root@ip-10-0-1-32 ~]# 

按照https://aws.amazon.com/ec2/instance-types/t3/我应该获得 1GB 的 RAM。有人能解释一下为什么我获得的 RAM 更少,以及为什么两个完全相同的实例的 RAM 大小不同吗?

答案1

这是我从 AWS 获得的答案。接下来的问题就是我能做些什么来降低内核占用空间。

来自 AWS Premium Support 的热情问候!!

我是 EC2 Linux 团队的 Prasanth,很高兴能帮助您解决这个案例。

首先,我们很抱歉回复延迟。我们最近接到大量客户支持案例,我们正在尽最大努力尽快回复每个问题。感谢您的耐心,我将继续帮助您解决您的问题。

从案例描述中,我了解到您对为什么 t3.micro 内存在操作系统级别上实际上有所不同,而在 AWS 实例类型文档中它们被列为 1 GiB 有疑问。您还想知道为什么完全相同的实例类型,一个实例比另一个实例多 120 MB 的 RAM。因此,您在观察到可用内存的差异后请求我们提供见解。如果我对您的问题有任何误解,请纠正我。

请允许我在下面的信函中逐一回答您的问题。

=> 查询 1:- 为什么我没有获得每个实例的完整 1GB 内存?

在我们继续之前,我想告诉你,这是一种预期的行为。差异在于内核为自己保留的内存(以及驱动程序保留的内存)。这通常是基于内存量的滑动比例。

这是因为内核可能会为内核空间和内存管理保留一些内存。这可能意味着诸如 top 和 free 之类的命令的输出可能不会详细地报告系统有多少内存。内核在启动时会为内存表(用于虚拟到物理地址的转换)保留一定量的内存(与其总大小成比例)。分配给内存表的这部分内存不能被其他任何东西使用,并且会从报告的总内存大小中减去。物理 RAM 越大,无法使用的内存与总物理 RAM 大小的比例就越小,对于内存较大的实例,开销在 1.56% 到 2% 之间。

这些保留的内存字节被分配给可变的内存预留。这些分配在给定系统上通常是相同的,但可能因系统不同或内核映像不同而不同。它们的大小取决于内核外部的某些因素,例如系统中的 CPU 数量或内存量,并且它们是不可回收的。大多数情况下,记为“保留”的内存被分配给 mem_map、内存 cgroup 结构、内核哈希表和特定于架构的预留。

您可以从 dmesg 或系统日志中检查保留内存信息,您会看到类似于内核:内存日志

$ sudo dmesg| grep -i 内存

或者

$ sudo cat /var/log/messages |grep -i 内存

为了进一步调试这个问题,我启动了一个类似的实例类型 t3.micro,它具有与您使用的相同 AMI(ami-0d6e9a57f6259ba3a)。

[root@test1 ~]# cat /etc/system-release
CentOS Linux release 8.2.2004 (Core)

然后我通过 free 和 /proc/meminfo 文件检查了总可用内存,我注意到可用内存约为 790 MB。

[root@test1 ~]#  free -m
              total        used        free      shared  buff/cache   available
Mem:            790         161         259          10         369         496
Swap:             0           0           0
[root@test1 ~]#

[root@test1 ~]# grep MemTotal /proc/meminfo
MemTotal:         809644 kB

如上所述,在实例上输入“sudo dmesg | grep -i memory”,我们将看到类似以下内容:-

[root@test1 ~]# sudo dmesg | grep -i memory
[    0.000000] kexec: Reserving the low 1M of memory for crashkernel
[    0.000000] Reserving 160MB of memory at 624MB for crashkernel (System RAM: 995MB)
[    0.000000] Early memory node ranges
[    0.000000] PM: Registered nosave memory: [mem 0x00000000-0x00000fff]
[    0.000000] PM: Registered nosave memory: [mem 0x0009f000-0x0009ffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000effff]
[    0.000000] PM: Registered nosave memory: [mem 0x000f0000-0x000fffff]
[    0.000000] Memory: 261120K/1019488K available (12292K kernel code, 2151K rwdata, 3848K rodata, 2404K init, 6476K bss, 268068K reserved, 0K cma-reserved)
[    0.026279] Freeing SMP alternatives memory: 32K
[    0.047046] x86/mm: Memory block size: 128MB
[    0.724714] Freeing initrd memory: 51480K
[    0.868145] Non-volatile memory driver v1.3
[    1.004205] Freeing unused decrypted memory: 2040K
[    1.005900] Freeing unused kernel memory: 2404K
[    1.011944] Freeing unused kernel memory: 2020K
[    1.013098] Freeing unused kernel memory: 248K

从这个输出中您可以获得保留内存,但这也可能因操作系统和内核的不同而有所不同。

将 268068 KB 转换为 MB,因此 MB 的值为 261.78MB

因此,正如我们在官方文档中所述,t3.micro 实例的总内存为 (790 + 261.78 = 1051) ~ 1 GiB。但是,如上所述,在我的测试实例中,Linux 内核保留了大约 268068 KB。

因此,AWS 虚拟机管理程序正在为客户操作系统分配正确的内存资源,因为客户操作系统为其维护和管理目的保留了一些内存空间,而 PROC 文件系统或内存监控工具报告的可用内存较少。

=> 查询 2:- 为什么对于完全相同的实例,一个比另一个多 120MB 的 RAM。

内存保留值可能因内核和配置参数而异。

在引导过程的后期,一些内存会被释放 - 例如,initrd ramdisk。因此,它会波动 - 总值在很大程度上取决于特定系统、内核配置和其他操作系统参数。

保留结构随硬件内存的增加而增加。其中一些是用于记账的保留空间,其他是用于驱动程序分配的内存。

/proc 的内核文档对 meminfo 的 MemTotal 值有如下说明:

MemTotal: Total usable ram (i.e. physical ram minus a few reserved bits and the kernel binary code)

https://www.kernel.org/doc/Documentation/filesystems/proc.txt

话虽如此,通常来说,没有清晰的方法来预测可用的总内存量。

但是,您可以借助 lsmem 命令找到实例的总分配内存。请查看我的测试机器的以下输出以供参考。

[root@test1 ~]# lsmem
RANGE                                 SIZE  STATE REMOVABLE BLOCK
0x0000000000000000-0x000000003fffffff   1G online        no   0-7

Memory block size:       128M
Total online memory:       1G     <====>
Total offline memory:      0B

希望以上信息能解决您的问题。如果您对此问题有任何疑问,或者您觉得我没有澄清任何内容,请随时回复以询问其他问题或了解更多信息。我很乐意为您提供帮助。

祝您度过美好的一天并注意安全!

我们非常重视您的反馈。请使用本函件末尾的 AWS 支持中心链接对本函件进行评级,分享您的体验。您还可以通过选择 AWS 支持中心内每封函件右上角的星号对每封函件进行评级。

此致敬礼,Prasanth R. Amazon Web Services

相关内容