I'm typing a shell script to find out the total physical memory in some RHEL linux boxes.
First of all I want to stress that I'm interested in the total physical memory recognized by kernel, not just the available memory. Therefore, please, avoid answers suggesting to read /proc/meminfo or to use the free, top or sar commands -- In all these cases, their "total memory" values mean "available memory" ones.
The first thought was to read the boot kernel messages:
Memory: 61861540k/63438844k available (2577k kernel code, 1042516k reserved, 1305k data, 212k init)
But in some linux boxes, due to the use of EMC2's PowerPath software and its flooding boot messages in the kernel startup, that useful boot kernel message is not available, not even in the /var/log/dmesg file.
The second option was the dmidecode command (I'm warned against the possible mismatch of kernel recognized RAM and real RAM due to the limitations of some older kernels and architectures). The option --memory simplifies the script but I realized that older releases of that command has no --memory option.
My last chance was the getconf command. It reports the memory page size, but not the total number of physical pages -- the _PHYS_PAGES system variable seems to be the available physical pages, not the total physical pages.
# getconf -a | grep PAGES PAGESIZE 4096 _AVPHYS_PAGES 1049978 _PHYS_PAGES 15466409
My question: Is there another way to get the total amount of physical memory, suitable to be parsed by a shell script?
Using
lsmem
:returns the physical online memory in bytes. Without the
-b
will return a human-readable value.lsmem
is provided in theutil-linux
RPM (verified on CentOS 7, UBI 7, UBI 8, and UBI 9) which is either a direct, or indirect, dependency of systemd. You should be able to find thelsmem
utility on any functional systemd based RHEL system.