今天在忽然发现2C4G的腾讯云服务器内存显示3.6GB
可恶的腾讯,悄咪咪的把我的内存偷走了,今天偷我0.4G,明天不敢想会干什么,,,,,,
bashroot@wxh-server:~# free -gh
total used free shared buff/cache available
Mem: 3.6Gi 1.0Gi 298Mi 3.0Mi 2.3Gi 2.3Gi
Swap: 0B 0B 0B
root@wxh-server:~# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.5 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
运维多年接触过很多虚拟化,其实有发现过类似的情况,但是没有认真研究过这个问题,今天来看看是什么情况
这种问题适合一层层去排查,肯定是哪个环节占用了大概0.4G左右
1, bios层
虚拟机的bios是模拟的,你把握不住
通过下面的命令可以看到 Size:4 GB ,说明从虚拟化层面是一点也没少给的,合理
bashroot@wxh-server:~# dmidecode -t memory
# dmidecode 3.3
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.
Handle 0x1000, DMI type 16, 23 bytes
Physical Memory Array
Location: Other
Use: System Memory
Error Correction Type: Multi-bit ECC
Maximum Capacity: 4 GB
Error Information Handle: Not Provided
Number Of Devices: 1
Handle 0x1100, DMI type 17, 40 bytes
Memory Device
Array Handle: 0x1000
Error Information Handle: Not Provided
Total Width: Unknown
Data Width: Unknown
Size: 4 GB
Form Factor: DIMM
Set: None
Locator: DIMM 0
Bank Locator: Not Specified
Type: RAM
Type Detail: Other
Speed: Unknown
Manufacturer: Smdbmds
Serial Number: Not Specified
Asset Tag: Not Specified
Part Number: Not Specified
Rank: Unknown
Configured Memory Speed: Unknown
Minimum Voltage: Unknown
Maximum Voltage: Unknown
Configured Voltage: Unknown
2,系统层 这层面信息量就很大了,一点点来看
ACPI 固件提示内核把这块物理内存保留,不给应用使用。合理
crashkernel 占用192MB,听名字是内核崩溃之类的。合理
bashroot@wxh-server:~# cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-5.15.0-171-generic root=UUID=7bccaefa-b039-4ff6-bd32-22dde0066c0b ro net.ifnames=0 biosdevname=0 console=ttyS0,115200 console=tty0 panic=5 intel_idle.max_cstate=1 intel_pstate=disable processor.max_cstate=1 crashkernel=0M-3G:0M,3G-8G:192M,8G-16G:256M,16G-64G:384M,64G-128G:512M,128G-486G:768M,486G-972G:1024M,972G-:2048M
系统RAM是4031MB,讲道理应该是4096MB的,中间少了4096-4031=65MB,这不合理吧
通过一番查询可能是bios本身占用的,系统启动前就给占了
别的信息大概就是启动过程中初始化系统的内存情况,以下两点比较重要
bashroot@wxh-server:~# dmesg | grep -i memory
[ 0.003488] ACPI: Reserving FACP table memory at [mem 0xbffe2639-0xbffe26ac]
[ 0.003490] ACPI: Reserving DSDT table memory at [mem 0xbffe0040-0xbffe2638]
[ 0.003491] ACPI: Reserving FACS table memory at [mem 0xbffe0000-0xbffe003f]
[ 0.003492] ACPI: Reserving APIC table memory at [mem 0xbffe26ad-0xbffe272c]
[ 0.003493] ACPI: Reserving SRAT table memory at [mem 0xbffe272d-0xbffe27f4]
[ 0.003897] Reserving 192MB of memory at 2864MB for crashkernel (System RAM: 4031MB)
[ 0.003921] Early memory node ranges
[ 0.012498] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]
[ 0.012500] PM: hibernation: Registered nosave memory: [mem 0x0009f000-0x000fffff]
[ 0.012501] PM: hibernation: Registered nosave memory: [mem 0xbffde000-0xffffffff]
[ 0.024412] Memory: 3625288K/4128240K available (16393K kernel code, 4399K rwdata, 10996K rodata, 3292K init, 18772K bss, 502692K reserved, 0K cma-reserved)
[ 0.196058] Freeing SMP alternatives memory: 44K
[ 0.325518] x86/mm: Memory block size: 128MB
[ 1.350769] Freeing initrd memory: 109320K
[ 1.430819] Freeing unused decrypted memory: 2036K
[ 1.432341] Freeing unused kernel image (initmem) memory: 3292K
[ 1.435096] Freeing unused kernel image (text/rodata gap) memory: 2036K
[ 1.436486] Freeing unused kernel image (rodata/data gap) memory: 1292K
1,内存并没有丢失,只是在虚拟化和系统层面被占用了,真是错怪腾讯了😓 2,free展示的就是proc/meminfo里面的内存信息
以下是大概的流程和丢失的部分,手动能搞得就是内核转储,关闭了可以获得将近200MB内存
bash4.0GB 物理内存
↓ (BIOS预留64MB)
4.0GB 可用内存
↓ (内核启动分配)
开机日志:3.47GB可用,4.0GB总内存
↓ (系统启动预留491MB)
实际运行:3.47GB可用
↓ (系统启动完成优化)
free -h:3.6GB总内存
# 0.4G丢失部分
- bios相关:65MB (虚拟BIOS等)
- crashkernel: 192MB (Linux内核崩溃转储) #可回收
- ACPI表: ~1MB (ACPI硬件配置表)
- nosave内存: ~1MB (休眠机制)
- 其他预留: ~150MB (内存管理结构)
本文作者:油炸臭豆腐
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!