Linux对机器进行性能分析之内存篇

本文主要探讨Linux系统下的内存分析,包括查看内存信息的命令如/proc/meminfo、free、dmidecode和vmstat,以及如何分析进程内存使用情况,如通过ps、pmap进行进程内存占用的检查。Linux系统利用buffer/cache提高数据读写效率,当内存不足时,会自动调整。此外,文章还提到了内存问题的定位方法和常用工具的选择。
摘要由CSDN通过智能技术生成

前言

前面我们已经学习了 CPU 篇,这篇来看下内存篇。

内存信息

/proc/meminfo

这个文件记录着比较详细的内存配置信息,使用 cat /proc/meminfo 查看。

[root@master ~]# cat /proc/meminfo
MemTotal:        1863196 kB
系统总内存,由于 BIOS、内核等会占用一些内存,所以这里和配置声称的内存会有一些出入,比如我这里配置有 2G,但其实只有 1.51G 可用。

MemFree:          121916 kB
系统空闲内存。

MemAvailable:     551240 kB
应用程序可用内存。有人会比较奇怪和 MemFree 的区别,可以从两个层面来区分,MemFree 是系统层面的,而 MemAvailable 是应用程序层面的。系统中有些内存虽然被使用了但是有一部分是可以回收的,比如 Buffers、Cached 及 Slab 这些内存,这部分可以回收的内存加上 MemFree 才是 MemAvailable 的内存值,这是内核通过特定算法算出来的,是一个估算值。

Buffers:             204 kB
缓冲区内存

Cached:           539568 kB
缓存

SwapCached:            0 kB
Active:           955436 kB
Inactive:         367568 kB
Active(anon):     761336 kB
Inactive(anon):    36160 kB
Active(file):     194100 kB
Inactive(file):   331408 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Dirty:                 4 kB
Writeback:             0 kB
AnonPages:        783228 kB
Mapped:           134288 kB
Shmem:             14264 kB
Slab:             127384 kB
SReclaimable:      69812 kB
SUnreclaim:        57572 kB
KernelStack:       11040 kB
PageTables:        42224 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     3028744 kB
Committed_AS:    4617028 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      185664 kB
VmallocChunk:   34359310332 kB
HardwareCorrupted:     0 kB
AnonHugePages:    122880 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      141184 kB
DirectMap2M:     1955840 kB
DirectMap1G:           0 kB

上面信息没有 MemUsed 的值,虽然可以用现有的值大致估算出来,但是我们想一步到位,就用下面的 free 命令。

free

这个命令估计用的人就多了(我一般都是用这个命令)。
在这里插入图片描述这里存在一个计算公式:

MemTotal = used + free + buff/cache(单位 K)

几个字段和上面 /proc/meminfo 的字段是对应的。还有个 shared 字段,这个是多进程的共享内存空间,不常用。

我们注意到 free 很小,buff/cache 却很大,这是 Linux 的内存设计决定的,Linux 的想法是内存闲着反正也是闲着,不如拿出来做系统缓存和缓冲区,提高数据读写的速率。但是当系统内存不足时,buff/cache 会让出部分来,非常灵活的操作。

要看比较直观的值,可以加 -h 参数
在这里插入图片描述

dmidecode

同样可以使用这个命令,对于内存,可以使用 dmidecode -t memory 查看:

[root@master ~]# dmidecode -t memory |grep Size
	Maximum Memory Module Size: 32768 MB
	Maximum Total Memory Size: 491520 MB
	Installed Size: 2048 MB (Single-bank Connection)
	Enabled Size: 2048 MB (Single-bank Connection)
	Installed Size: Not Installed

Maximum Memory Module Size: 32768 MB,Maximum Total Memory Size: 491520 MB怎么这么大,这是做什么用的?

vmstat

这个命令也是非常常用了。但对于内存,显示信息有限。它更多是用于进行系统全局分析和 CPU 分析。详细可以看 CPU 分析一文。

进程内存使用情况分析

最常用的两个命令 ps 和 top,虽然很简单的两个命令,但还是有不少学问的。
top 命令运行时默认是按照 CPU 利用率进行排序的,如果要按照内存排序,该怎么操作呢?两种方法,一种直接按 “M”(相应的按 “P” 是 CPU),另外一种是在键入 top 之后,按下 “F”,然后选择要排序的字段,再按下 “s” 确认即可。
在这里插入图片描述可以看到,我按照 “%MEM” 排序的结果。这个结果对于查看系统占用内存较多的哪些进程是比较有用的。

然后这里我们会重点关注几个地方,上面横排区,和前面几个命令一样可以查看系统内存信息,中间标注的横条部分,和内存相关的有三个字段:VIRT、RES、SHR。

  • VIRT:virtual memory usage,进程占用的虚拟内存大小。
  • RES:resident memory usage,进程常驻内存大小,也就是实际内存占用情况,一般我们看进程占用了多少内存,就是看的这个值。
  • SHR:shared memory,共享内存大小,不常用。

ps

ps 同样可以查看进

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值