管理内存
基本概念
内存是计算机的重要组成部件,用于暂时存放CPU中的运算数据,以及与硬件等外部存储器交换的数据。特别地,非统一内存访问架构(non-uniform memory access,简称NUMA)是一种为多处理器的电脑设计的内存架构,内存访问时间取决于内存相对于处理器的位置。在NUMA下,处理器访问本地内存的速度比非本地内存速度(内存位于另一个处理器,或者是处理器之间共享的内存)快。
查看内存
free:可用于显示系统内存状态。
例如:
# 显示系统内存状态,以MB单位显示 free -m
回显信息如下:
[root@openEuler ~]# free -m total used free shared buff/cache available Mem: 2633 436 324 23 2072 2196 Swap: 4043 0 4043
在命令的输出信息中,各字段所代表的含义如下:
标识 含义 total 总内存数。 used 已经使用的内存数。 free 空闲的内存数。 shared 多个进程共享的内存总数。 buff/cache 缓冲和缓存内存总数。 available 估计有多少内存可用于启动新应用程序,而不交换。 vmstat:可以动态地监控系统内存,查看系统内存的使用情况。
例如:
# 监测系统内存,显示活跃和非活跃内存 vmstat -a
回显信息如下:
[root@openEuler ~]# vmstat -a procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free inact active si so bi bo in cs us sy id wa st 2 0 520 331980 1584728 470332 0 0 0 2 15 19 0 0 100 0 0
在命令的输出信息中,与内存相关的memory字段所代表的含义如下:
字段 含义 memory 内存信息字段。-swpd:虚拟内存的使用情况,单位为 KB。-free:空闲的内存容量,单位为 KB。-inact:非活跃的内存容量,单位为 KB。-active:活跃的内存容量,单位为 KB。 sar:可用于监控系统的内存使用情况。
例如:
# 系统内存在采样时间内的使用情况,每2秒统计一次,统计 3 次 sar -r 2 3
回显信息如下:
[root@openEuler ~]# sar -r 2 3 04:02:09 PM kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kb dirty 04:02:11 PM 332180 2249308 189420 7.02 142172 1764312 787948 11.52 470404 1584924 36 04:02:13 PM 332148 2249276 189452 7.03 142172 1764312 787948 11.52 470404 1584924 36 04:02:15 PM 332148 2249276 189452 7.03 142172 1764312 787948 11.52 470404 1584924 36 Average: 332159 2249287 189441 7.03 142172 1764312 787948 11.52 470404 1584924 36
在命令的输出信息中,各字段所代表的含义如下:
字段 含义 kbmemfree 内存的未使用空间。 kbmemused 内存的已使用空间。 %memused 已使用空间的百分比。 kbbuffers 缓冲区的数据存取量。 kbcached 系统全域的数据存取量。 numactl:可用于查看NUMA节点配置和状态。
例如:
# 查看当前的NUMA配置 numactl -H
回显信息如下:
[root@openEuler ~]# numactl -H available: 1 nodes (0) node 0 cpus: 0 1 2 3 node 0 size: 2633 MB node 0 free: 322 MB node distances: node 0 0: 10
服务器共划分为1个NUMA节点。每个节点包含4个CPU core,每个节点的内存大小约为6GB。 同时,该命令还给出了不同节点间的距离,距离越远,跨NUMA内存访问的延时越大。应用程序运行时应减少跨NUMA访问内存。
numastat:可用于观察各个NUMA节点的状态
# 观察NUMA节点的状态 numastat
[root@openEuler ~]# numastat node0 numa_hit 5386186 numa_miss 0 numa_foreign 0 interleave_hit 17483 local_node 5386186 other_node 0
numastat命令输出字段及其含义如下:
标识 含义 numa_hit 节点内CPU核访问本地内存的次数。 numa_miss 节点内核访问其他节点内存的次数。 numa_foreign 初始分配在本地,最后分配在其他节点的叶数量。每个numa_foreign对应numa_miss事件。 interleave_hit interleave策略页成功分配到这个节点。 local_node 该节点的进程成功在这个节点上分配内存访问的大小。 other_node 该节点的进程在其他节点上分配的内存访问大小。
文档捉虫