今天有客户找过来,询问他Linux系统的一些问题,他的主要问题如下:
云服务器的内存为2G,为何显示的内存不足2G,依据如下:
[root@localhost ~]# free -m total used free shared buff/cache available Mem: 1833 494 465 16 874 1124 Swap: 2047 0 2047
也就是说,他的total memory为1833MB,不是2048MB,然后客户说我们内存没给足。由于之前还真没注意这个,只知道kdump或者linux的缓存机制可能会使可用的内存变小,那么怎么才能知道服务器的实际物理内存大小呢?
google之后,大致了解如下内容:
实际上,用户输入命令free -m之后,显示的total mem为实际可用的内存大小,也就是说,除此之外的内存,因为各种机制,实际的系统中的程序是无法使用的。物理内存的大小可以这样查看:
[root@localhost ~]# dmidecode -t 17 | grep "Size.*MB"
显示结果:
Size: 2048 MB
这个就是实际的物理内存的大小了,实际上dmidecode命令是用于导出计算机dmi信息的工具,可以查看设备的cpu、物理内存等信息。如果对上述命令直接显示的结果有疑问,可以看下所有信息的显示:
dmidecode -t memory | less
显示结果:
# dmidecode 2.12 SMBIOS 2.3 present. Handle 0x0051, DMI type 16, 15 bytes Physical Memory Array Location: Unknown Use: System Memory Error Correction Type: None Maximum Capacity: Unknown Error Information Handle: 0x0050 Number Of Devices: 64 Handle 0x0055, DMI type 17, 27 bytes Memory Device Array Handle: 0x0051 Error Information Handle: 0x0050 Total Width: Unknown Data Width: Unknown Size: 2048 MB Form Factor: Unknown Set: None Locator: M0 Bank Locator: None Type: Other Type Detail: Unknown Speed: Unknown Manufacturer: Microsoft Serial Number: None Asset Tag: None Part Number: None
实际上,后面还有很多关于内存的信息,这里就不一一列举了。
DMI设备分为如下的类型:
0 BIOS 1 System 2 Baseboard 3 Chassis 4 Processor 5 Memory Controller 6 Memory Module 7 Cache 8 Port Connector 9 System Slots 10 On Board Devices 11 OEM Strings 12 System Configuration Options 13 BIOS Language 14 Group Associations 15 System Event Log 16 Physical Memory Array 17 Memory Device 18 32-bit Memory Error 19 Memory Array Mapped Address 20 Memory Device Mapped Address 21 Built-in Pointing Device 22 Portable Battery 23 System Reset 24 Hardware Security 25 System Power Controls 26 Voltage Probe 27 Cooling Device 28 Temperature Probe 29 Electrical Current Probe 30 Out-of-band Remote Access 31 Boot Integrity Services 32 System Boot 33 64-bit Memory Error 34 Management Device 35 Management Device Component 36 Management Device Threshold Data 37 Memory Channel 38 IPMI Device 39 Power Supply 40 Additional Information 41 Onboard Devices Extended Information 42 Management Controller Host Interface
实际上,在查看物理内存中,我们关注type 17即可。
dmidecode -t 17 | less
需要注意的是,dmidecode命令必须用root权限才能运行。
另外,也可以用
[root@localhost ~]# cat /proc/meminfo
查看内存使用情况,通常情况下,最后两行:
DirectMap4k: 47040 kB DirectMap2M: 2050048 kB
把这两行显示的数值相加,除以1024,就是实际物理内存的大小。
如何查看Linux物理内存大小