![dmesg 告诉我们 128G 中还有 1G 可用?](https://linux22.com/image/779684/dmesg%20%E5%91%8A%E8%AF%89%E6%88%91%E4%BB%AC%20128G%20%E4%B8%AD%E8%BF%98%E6%9C%89%201G%20%E5%8F%AF%E7%94%A8%EF%BC%9F.png)
我有一台 128GB RAM 的服务器,内核 4.18.0-305.7.1.el8_4.x86_64,“dmesg | grep Memory”输出如下:
[0.000000]内存:1282732K/133708404K可用(12293K内核代码、2225K rwdata、7708K rodata、2476K init、14048K bss、2721876K保留、0K cma保留)
令我困惑的是“1282732K”。
我知道“133708404K”代表系统的总 RAM,那么内核中的“1282732K”是什么意思?128GB 中只能使用 1.2GB 吗?
“cat /proc/meminfo”显示:
MemTotal: 131494424 kB
MemFree: 25128904 kB
MemAvailable: 29625476 kB
Buffers: 4751752 kB
Cached: 570920 kB
SwapCached: 353700 kB
Active: 91801188 kB
Inactive: 6120828 kB
Active(anon): 87248832 kB
Inactive(anon): 5473052 kB
Active(file): 4552356 kB
Inactive(file): 647776 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 16777212 kB
SwapFree: 16345892 kB
Dirty: 16 kB
Writeback: 0 kB
AnonPages: 92242344 kB
Mapped: 127760 kB
Shmem: 122540 kB
KReclaimable: 273356 kB
Slab: 759136 kB
SReclaimable: 273356 kB
SUnreclaim: 485780 kB
KernelStack: 18704 kB
PageTables: 196364 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 82524424 kB
Committed_AS: 153723376 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
Percpu: 77760 kB
HardwareCorrupted: 0 kB
AnonHugePages: 88938496 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
FileHugePages: 0 kB
FilePmdMapped: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 508928 kB
DirectMap2M: 30439424 kB
DirectMap1G: 104857600 kB
答案1
该内核消息来自mem_init_print_info()
函数。在启动早期调用,可能在中途调用start_kernel()
时间戳表示0.000000
这是系统启动后第一微秒内可用的页面(和内核大小)。即使对于计算机来说,这也是很短的时间。几秒钟后,当您登录并可以/proc/meminfo
自行检查时,时间会长数百万倍,相对而言是永恒。
我对 Linux 虚拟内存了解不够多,无法准确解释内核在启动初期可以进行哪些初始化。但它现在并不代表内存使用情况。
/proc/meminfo
系统启动后使用基于内存的监控。无论您最喜欢的主机指标工具是什么。
初始化信息在极少数情况下可能仍然有用,例如取证以确定内核的大小是否发生变化。