Linux 32G内存显示为31G,如何获取准确32G显示结果?
解决Linux内存显示为31G而非标注32G的问题
嗨,这个情况其实挺常见的,核心原因是内存单位进制的差异和整数除法的取舍规则:厂商标注的32G是按十进制(1GB=1000MB=109字节)计算的,而Linux默认采用二进制(1GiB=1024MiB=230字节)统计,再加上整数除法直接舍去小数部分,就出现了“明明是32G机器却显示31G”的情况。
下面给你几个能得到"32G"显示结果的实用方法:
方法1:四舍五入计算内存值
利用工具处理小数,让计算结果四舍五入到整数:
- 用awk快速实现:
原理是把计算出的31.25加上0.5后取整,直接得到32。cat /proc/meminfo | grep MemTotal | awk '{printf "%dG\n", ($2/1024/1024)+0.5}' - 用bc工具分步计算:
mem=$(cat /proc/meminfo | grep MemTotal | awk '{print $2}') echo "scale=0; $mem / 1024 / 1024 + 0.5" | bc
方法2:按厂商的十进制单位计算
直接采用1000进制换算,和厂商标注的规则对齐:
cat /proc/meminfo | grep MemTotal | awk '{printf "%dG\n", $2/1000/1000}'
你的MemTotal是32767184 KB,除以1000两次得到约32.76,取整后就是32G。
方法3:调整free命令的显示格式
free命令默认用二进制单位,加上--si参数就能切换为十进制单位:
free --si -g
执行后Mem行的总内存就会显示为32G了。
简单总结下:你机器的实际物理内存确实是厂商标注的32GB(十进制),只是Linux默认用GiB(二进制)统计,所以才会显示31GiB,以上方法都能让你得到和标注一致的"32G"结果。
内容的提问来源于stack exchange,提问作者yael
相关产品推荐
相关产品推荐

