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

posted @ 2021-05-14 22:06  goto2091  阅读(150)  评论(0编辑  收藏  举报