linux性能优化——内存基础
Linux内存基础信息检查
linux系统中,关于memory的常用基本信息,有Total Memory size,和memory capacity,memory speed,以及NUMA是否支持。NUMA支持可以通过lscpu查看numa node是否大于1进行判断。memory size是指当前系统中加载的内存总容量,capacity则表示系统支持的总内存大小。memory speed 指内存运行的速率。
内存的基本信息可以通过以下指令查看:
cat /proc/meminfo
通过proc文件系统,可以在系统运行时访问内核的数据结构,改变内核设置的机制。proc是伪文件系统,只存在于内存中。而不占用外存空间。以文件的形式访问和膝盖系统内核参数。因此,用户可通过proc得到系统信息,并且改变内核参数。proc中的参数来自于运行时系统,因此里面的部分参数会改变。
相关资料 https://www.linuxprobe.com/linux-proc-pid.html
注:
proc中的sys文件夹中的参数是可写的,proc中的cmdline信息是进程启动时的完整命令行参数。 /proc/cmdline是内核启动时从u boot传入的参数。 而/proc/进程号xxxx/cmdline是该进行xxxx启动时的完整命令行参数。
通过/proc/meminfo可以查看内存的基本信息:
MemTotal: 263606412 kB
MemFree: 198875356 kB
MemAvailable: 204824316 kB
......
Hugepagesize: 1048576 kB
Hugetlb: 52428800 kB
MemTotal 行显示的值便是内存总大小。
使用shell提取出MemTotal的值。
如果使用命令行:
cat /proc/meminfo | grep -i memtotal | awk '{print "Memory Size is "$2" "$3}'
得到结果
Memory Size is 263606412 kB
也可以写成函数
function show_mem_size(){
a=$(cat /proc/meminfo | grep -i memtotal | awk '{print "Memory Size is\t"$2" "$3}')
echo "$a"
}
使用shell提取出memory的capacity
内存的Capacity指该系统可以容纳的最大内存容量,该容量由硬件配置决定,因此可以使用dmidecode可以查看。
https://ipcmen.com/dmidecode
要注意,dmi中的信息可以被认为修改,因此不一定准确。
查看内存最大容量以及插槽数目。参考:
https://blog.csdn.net/weixin_42511206/article/details/116632510
执行以下指令
dmidecode | grep -P 'Maximum\s+Capacity'| awk '{print "Memory Capacity is\t"$3 $4}'
dmidecode中的Maximum Capacity行即是最大内存容量
查看内存的速率和DIMM
使用dmidecode可以查看硬件信息
dmidecode -t memory# 该指令得到所有内存插槽信息
上指令得到所有内存插槽,插槽上有内存条的设备,会显示Size: xxx
。没有内存条的设备,会显示“Size: No Module Installed”
。当前所有的内存条设备基本是DIMM插槽。所以当我们打印内存速率信息的时候,往往一并把DIMM也打印出来。DIMM信息在包含“Locator”关键字的行找到。
通过以下指令
dmidecode -t 17 | grep -E "^Handle|^Memory|^\sSize:|Locator" | grep -C 2 "^\sSize:\s[0-9]"
grep -C 2可以将被匹配行的上下两行打印出来。
grep -E是正则匹配。这里是多行匹配。
17是memory在dmi中的代号。
关于grep的正则匹配,"^"表示开头位置。
参考以下资料 https://www.linuxprobe.com/regular-expressions-in-grep.html