Linux:四千字长文带你彻底掌握内存管理常用命令的用法

一、Linux内存管理介绍

Linux操作系统的内核有五大核心子系统,分别是进程调度系统、虚拟文件系统(VFS)、内存管理单元(MMU)、网络单元、进程间通信(IPC)。内存管理子系统是其中之一,负责在系统上运行的各种进程之间正确分配内存资源,管理系统内存的分配、释放、映射、管理、交换、压缩等一系列操作。

内存管理的主要任务包括:

1、合理分配物理内存给进程、内核和缓存,实现高效分配物理内存

2、为进程提供独立的虚拟地址空间,隔离进程内存,实现虚拟地址的映射。

3、 Linux中的内存被划分为多个区域,如:内核空间、用户空间、缓存、交换分区等,每个区域有不同的作用,内存管理要防止用户非法访问内核空间,支持共享内存(如动态库),实现内存的保护与共享。

4、通过交换(Swap)和页面回收机制应对内存不足,实现内存的动态扩展与回收。

欢迎关注工 众 号:ItBeeCoder,查看更多高质量技术文章,发送“ds”获取清华大学 《DeepSeek从入门到精通》

二、常用命令详解

在使用Linux系统时,内存的已使用、剩余大小、交换空间的使用情况、不同进程的内存占用情况需要用户和相应技术人员重点关注。内存的监控和管理需要借助内存管理命令实现,本文主要介绍内存管理时常用的一些命令及其用法。

1、 free

1)功能介绍

该命令主要是查看内存使用状态,实时显示系统的物理内存、交换空间(Swap)及内核缓冲区的使用情况,全称可理解为 Free Memory Display。

2)使用语法

free[选项]

3)常用选项

可以选择-b、-k、-m、-g来设置显示的内存单位,如:- g  表示以 GB 为单位显示(默认单位为 KB)
–l可以显示内存的利用率
-t显示全部内存(物理内存 + Swap 的总和)情况
-h以人可读的方式((GB/MB/KB))显示内存信息。-h与其他命令最大不同是-h选项会在数字后面加上可读的单位
-s N:表示每隔N秒打印一次内存信息,N对应的是秒数,直到用ctrl+c结束
-c N:表示重复打印内存信息N次

4)使用实例

例1:查看内存空间的总体概览情况

free -h 

在这里插入图片描述

结果列说明:

第一列
Mem 内存的使用信息
Swap 交换空间的使用信息
第一行
total 系统总的可用物理内存大小
used 已被使用的物理内存大小
free 还有多少物理内存可用
shared 被共享使用的物理内存大小
buff/cache 被 buffer 和 cache 使用的物理内存大小
available 还可以被 应用程序 使用的物理内存大小

这里需要注意:free 与 available 的区别
free 是真正尚未被使用的物理内存数量。
available 是应用程序认为可用内存数量,available = free + buffer + cache (注:只是大概的计算方法)
Linux 为了提升读写性能,会消耗一部分内存资源缓存磁盘数据,对于内核来说,buffer 和 cache 其实都属于已经被使用的内存。但当应用程序申请内存时,如果 free 内存不够,内核就会回收 buffer 和 cache 的内存来满足应用程序的请求。

例2:

free -h -s 2

该命令表示每2秒刷新一次结果,以易读格式显示

在这里插入图片描述

欢迎关注工 众 号:ItBeeCoder,查看更多高质量技术文章,发送“ds”获取清华大学 《DeepSeek从入门到精通》

2、 vmstat

1)功能

该命令是Virtual Memory Statistics的缩写,是一个虚拟内存统计工具,报告虚拟内存、进程、CPU、IO 等系统活动状态。

注:Linux中vmstat 及下文介绍的4、pmap 命令不是默认安装的,有时需要用户自己安装。

对于 CentOS 8 或RHEL 8,使用以下命令安装:

sudo dnf update
sudo dnf install procps-ng

在这里插入图片描述

2)使用语法

vmstat [选项] [间隔时间] [次数]

3)常用选项

-a  显示活跃(active)和非活跃(inactive)内存。
-s  以表格形式汇总内存事件(如缺页次数、Swap 使用)。
-d  显示磁盘 I/O 统计。
1 5  每1秒刷新一次,共输出5次。

4)使用实例

例1:

vmstat

在这里插入图片描述

例2:每秒刷新一次,显示活跃内存,共3次
在这里插入图片描述

输出结果字段解析:

swpd:已使用的 Swap 空间(KB)。  
free/inact/active:空闲、非活跃、活跃内存(KB)。  
si/so:每秒从磁盘换入(Swap In)和换出(Swap Out)的数据量。  
bi/bo:块设备每秒读/写次数(块数)。 

3、 top

1)功能
该命令是Table of Processes 的缩写,该命令用于实时显示所有正在运行和实际运行并且更新到列表中,显示CPU的使用、内存的使用、交换内存等,以交互方式实时显示系统资源的使用情况和运行中的进程。它提供了一个动态更新的进程列表,以及按CPU或内存使用率排序进程的功能。

Top命令也可用于进程的监控,具体用法可见上篇文章【Linux:五千字长文带你详解进程基本概念、管理命令、用法及输出列】

2)语法

top [选项]

3)常用选项

-d <秒数>:刷新间隔时间。  
-p <PID>:监控指定进程。  
-b:批处理模式(输出到文件)

4)使用实例

例1:使用top 启动实时监控

在这里插入图片描述

在top进程界面:

按M可以查看占用内存最多的进程
按c可以显示进程所在的路径
按A可以分块显示
按P表示显示结果按 CPU 使用排序。
键盘上的`q` 键可退出 `top`。

输出结果列中字段解析:

VIRT:进程虚拟内存总量(含共享库和 Swap)。  
RES:驻留物理内存(RSS,单位 KB)。  
SHR:共享内存大小。  

例2;每2秒刷新一次,输出到文件

top -d 2-b > top_log.txt 

该命令需要通过ctrl+c退出。

在这里插入图片描述

在这里插入图片描述

欢迎关注工 众 号:ItBeeCoder,查看更多高质量技术文章,发送“ds”获取清华大学 《DeepSeek从入门到精通》

4、 pmap

1)功能介绍

该命令是Process Memory Map的缩写,用于显示进程的详细内存映射,能显示一个或多个进程的虚拟内存地址空间,包括每个内存段的大小、权限等信息,常用于调试和优化程序性能。

2)语法

pmap [选项] PID [PID ...]

这里的PID表示要查看的进程ID,可以是一个或多个。

3)常用选项

-x:显示扩展详细信息(显示 RSS 和 PSS)。
-X :显示更详细的内存映射信息(该选项参数需要 root 权限)。
-p <PID>:指定目标进程 ID。
-d:显示设备格式

4)使用实例

例1:

pmap -x <PID>

在这里插入图片描述

例2:查看 的进程内存映射

pmap -X 1546861

在这里插入图片描述

输出结果字段解析:

Size:虚拟内存大小。  
Rss:实际驻留物理内存。  
Pss:按比例计算的共享内存(更准确) 

欢迎关注工 众 号:ItBeeCoder,查看更多高质量技术文章,发送“ds”获取清华大学 《DeepSeek从入门到精通》

5、 smem

1)功能介绍
该命令的全称是System Memory Reporter。可用于精确统计进程内存占用,区分独占内存(USS)、共享内存(PSS)和总驻留内存(RSS)。

在没有安装smem 命令的机器上,需要用户手动安装该命令。

对于对于 Fedora 或 CentOS 8 及更新版本,使用以下命令安装:

sudo dnf install smem

Debian/Ubuntu系统,使用:

sudo apt install smem 

2)语法

smem [options]

3)常用选项

 -h, --help:显示帮助信息并退出。
 -H, --no-header:不显示表头行。
 -c COLUMNS, --columns=COLUMNS:指定要显示的列,例如 pid,user,command,swap,uss,pss,rss。
 -t, --totals:显示总计行。
 -R REALMEM, --realmem=REALMEM:设置物理 RAM 的总量,这对于解释 PSS 数值非常重要。
 -K KERNEL, --kernel=KERNEL:指定内核镜像路径,主要用于嵌入式系统或特殊用途。
 -m, --mappings:显示内存映射信息。
 -P PROCESSFILTER, --processfilter=PROCESSFILTER:使用正则表达式过滤进程。
 -M MAPFILTER, --mapfilter=MAPFILTER:使用正则表达式过滤内存映射。
 -U USERFILTER, --userfilter=USERFILTER:使用正则表达式过滤用户。
 -n, --numeric:输出数值形式,不带单位。
 -s SORT, --sort=SORT:指定排序依据的字段,如 pss、rss 等。
-r, --reverse:反转排序顺序。
 -p, --percent:显示百分比。
 -k, --abbreviate:显示单位后缀,如 KB、MB、GB 等。
--pie=PIE:显示饼状图。
 --bar=BAR:显示柱状图
  -u, --users:按用户分组显示内存使用情况。
 -w, --system:显示整个系统的内存使用情况。

4)使用实例

例:按用户汇总内存使用

smem-t -k -u
返回结果:

UserCount     Swap      USS      PSS      RSS 
root50      0、0K   123、0M   145、0M   200、0M 
alice20      0、0K    45、0M    50、0M    70、0M 

输出结果字段解析

USS(Unique Set Size):表示进程独占内存。  
PSS(Proportional Set Size):表示共享内存按进程数均摊后的值。

### `欢迎关注工 众 号:ItBeeCoder,查看更多高质量技术文章,发送“ds”获取清华大学 《DeepSeek从入门到精通》`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值