实战|掌握Linux内存监视:free命令详解与使用技巧
文章目录
- 前言
- 一. free命令介绍
- 二. 语法格式及常用选项
- 三. 参考案例
- 3.1 查看free相关的信息
- 3.2 以MB的形式显示内存的使用情况
- 3.3 以总和的形式显示内存的使用情况
- 3.4 周期性的查询内存的使用情况
- 3.5 以更人性化的形式来查看内存的结果输出
- 四. free在脚本中的应用
- 总结
前言
大家好,又见面了,我是沐风晓月,本文是专栏【linux基本功-基础命令实战】的第53篇文章。
专栏地址:[linux基本功-基础命令专栏] , 此专栏是沐风晓月对Linux常用命令的汇总,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
🏠个人主页:我是沐风晓月
🧑个人简介:大家好,我是沐风晓月,双一流院校计算机专业😉😉
💕 座右铭: 先努力成长自己,再帮助更多的人 ,一起加油进步🍺🍺🍺
💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘
一. free命令介绍
free 是一个 Linux 和 Unix 操作系统中常用的命令,它用于显示系统中可用内存的总量、已用内存的总量、空闲内存的总量和缓存的内存量。
二. 语法格式及常用选项
依据惯例,我们还是先查看帮助,使用 free --help
[root@mufeng ~]# free --helpUsage:free [options]Options:-b, --bytes show output in bytes-k, --kilo show output in kilobytes-m, --mega show output in megabytes-g, --giga show output in gigabytes--tera show output in terabytes--peta show output in petabytes-h, --human show human-readable output--si use powers of 1000 not 1024-l, --lohi show detailed low and high memory statistics-t, --total show total for RAM + swap-s N, --seconds N repeat printing every N seconds-c N, --count N repeat printing N times, then exit-w, --wide wide output--help display this help and exit-V, --version output version information and exit
为了更直观一些,我们把常用的参数用表格来展示:
参数 | 描述 |
---|---|
-b | 以字节为单位显示内存使用情况; |
-k | 以千字节为单位显示内存使用情况; |
-m | 以兆字节为单位显示内存使用情况; |
-g | 以吉字节为单位显示内存使用情况; |
-h | 人性化显示内存使用情况,以适合人类阅读的方式显示; |
-s <秒数> | 指定间隔秒数,以连续监控内存使用情况; |
-c <次数> | 指定监控次数,完成后退出; |
-t | 在汇总行中显示内存总量。 |
有了具体的参数之后,我们再来看实战案例:
三. 参考案例
3.1 查看free相关的信息
[root@mufeng ~]# freetotal used free shared buff/cache available
Mem: 1863252 833224 376152 134604 653876 657068
Swap: 2097148 29448 2067700
这里出现的参数的解释:
- total:物理内存总量。
- used:已经使用的物理内存量。
- free:尚未使用的物理内存量。
- shared:被共享使用的物理内存量
- buffers:被缓存的物理内存量。
- cached:被缓存的硬盘文件的物理内存量。
- available:剩余可用的物理内存量。
- Swaptotal:交换空间总量。
- Swap used:已经使用的交换空间量
- Swap free:尚未使用的交换空间量
示例输出:
total used free shared buffers cached
Mem: 1024000 999000 24000 3000 12000 700000
-/+ buffers/cache: 287000 737000
Swap: 524284 0 524284
上述示例输出解释:
物理内存总量为1GB(1024000KB)。
已经使用的物理内存量为999MB(999000KB)。
尚未使用的物理内存量为24MB(24000KB)。
被共享使用的物理内存量为3MB(3000KB)。
被缓存的物理内存量为12MB(12000KB)。
被缓存的硬盘文件的物理内存量为700MB(700000KB)。
剩余可用的物理内存量为737MB(737000KB)。
交换空间总量为512MB(524284KB)。
已经使用的交换空间量为0。
尚未使用的交换空间量为512MB(524284KB)。
问题1: 那buffers和cached都是缓存,两者有什么区别呢?
的确buffers 和 cached 都是用于缓存的内存,但是它们的缓存对象不同:
buffers:用于缓存块设备(如硬盘、光驱等)的输入输出数据,缓存的是磁盘块的数据。这个缓存会在数据被写入磁盘后被释放掉,不会持久化到磁盘上。
cached:用于缓存文件系统的数据,缓存的是文件数据。这个缓存会在文件被修改时被写入磁盘,从而变成持久化的缓存。
因此,buffers 主要是用于优化磁盘 I/O 操作,而 cached 主要是用于优化文件读取操作。在 Linux 系统中,buffers 和 cached 都会占用未被应用程序使用的内存,以提高系统性能和响应速度。当需要更多内存时,它们可以被释放掉,以供应用程序使用。
问题2 : free中的available 是什么
“available” 的美音标是 /əˈveɪləbl/
available 字段是指系统中可用的内存量,它表示系统当前可用于分配给新进程使用的内存量。这个值并不完全等于 free 字段,因为还考虑了缓存的内存和已经被分配但可以被回收的内存。
available 字段的计算方法是:free + buffers + cached - low water mark,其中 low water mark 是一个系统内部预留的缓冲区,用于保证系统能够保持足够的缓存能力,以应对高峰期的内存需求。
available 字段可以用来估算系统还可以为新进程提供的内存空间,因为它考虑了系统当前缓存的内存,以及一些可以被回收的内存。但是需要注意的是,这个值并不是绝对精确的,因为它只是一个估算值,而且可能会随着系统使用情况的变化而变化。
从应用程序的角度来说,可用内存=系统free memory+buffers+cached。
3.2 以MB的形式显示内存的使用情况
以M对形式显示,此处用的是MB
[root@mufeng ~]# free -mtotal used free shared buff/cache available
Mem: 1819 813 367 131 638 641
Swap: 2047 28 2019
[root@mufeng ~]#
3.3 以总和的形式显示内存的使用情况
此处使用 -t参数,代码如下:
[root@mufeng ~]# free -ttotal used free shared buff/cache available
Mem: 1863252 833156 376216 134604 653880 657136
Swap: 2097148 29448 2067700
Total: 3960400 862604 2443916
[root@mufeng ~]#
3.4 周期性的查询内存的使用情况
-s参数可以周期行的查询内存的使用情况:
比如每五秒钟查询一次:
[root@mufeng ~]# free -s 5total used free shared buff/cache available
Mem: 1863252 833220 376152 134604 653880 657072
Swap: 2097148 29448 2067700total used free shared buff/cache available
Mem: 1863252 833220 376152 134604 653880 657072
Swap: 2097148 29448 2067700
可以看到每五秒钟会跳一次,也就是查询一次。
3.5 以更人性化的形式来查看内存的结果输出
此处我们用到 -h参数
[root@mufeng ~]# free -htotal used free shared buff/cache available
Mem: 1.8G 813M 367M 131M 638M 641M
Swap: 2.0G 28M 2.0G
[root@mufeng ~]#
以上就是free命令的全部内容,后续如果有新的感悟在继续添加。
四. free在脚本中的应用
下面是一个关于free命令的脚本示例,该脚本可以在Linux系统中使用,用于监视系统的内存使用情况,并在内存不足时发出警告。
#!/bin/bashTHRESHOLD=80 # 内存使用率超过80%时发出警告while true
doOUTPUT=$(free | grep Mem)TOTAL=$(echo $OUTPUT | awk '{print $2}')USED=$(echo $OUTPUT | awk '{print $3}')FREE=$(echo $OUTPUT | awk '{print $4}')PERCENTAGE=$((USED*100/TOTAL))DATE=$(date)if [ $PERCENTAGE -gt $THRESHOLD ]; thenecho "警告!内存使用率超过 $THRESHOLD% 在 $DATE!"fisleep 10
done
脚本解释:
-
THRESHOLD=80:定义一个变量THRESHOLD,表示内存使用率的阈值,即当内存使用率超过80%时发出警告。
-
while true:无限循环,不停地监视内存使用情况。
-
OUTPUT=$(free | grep Mem):执行free命令,并使用grep命令过滤出其中包含“Mem”的行,将输出结果赋值给变量OUTPUT。
-
TOTAL=$(echo $OUTPUT | awk ‘{print $2}’):使用echo和awk命令从变量OUTPUT中提取出物理内存总量,将结果赋值给变量TOTAL。
-
USED=$(echo $OUTPUT | awk ‘{print $3}’):使用echo和awk命令从变量OUTPUT中提取出已使用的物理内存量,将结果赋值给变量USED。
-
FREE=$(echo $OUTPUT | awk ‘{print $4}’):使用echo和awk命令从变量OUTPUT中提取出尚未使用的物理内存量,将结果赋值给变量FREE。
-
PERCENTAGE=$((USED*100/TOTAL)):计算内存使用率的百分比,将结果赋值给变量PERCENTAGE。
-
DATE=$(date):获取当前系统时间,将结果赋值给变量DATE。
-
if [ $PERCENTAGE -gt $THRESHOLD ]; then:如果内存使用率超过阈值,即PERCENTAGE大于THRESHOLD,则执行下一步。
-
echo “警告!内存使用率超过 $THRESHOLD% 在 $DATE!”:在控制台上输出警告信息,包括当前时间和内存使用率。
-
sleep 10:休眠10秒,等待下一次监视。
总结
free命令在日常工作中,应用的比较广泛,一定要认真学习,记熟记牢常用参数。
💕💕💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!✨ ✨ ✨
🍻🍻🍻如果你喜欢的话,就不要吝惜你的一键三连了~
相关文章:

实战|掌握Linux内存监视:free命令详解与使用技巧
文章目录前言一. free命令介绍二. 语法格式及常用选项三. 参考案例3.1 查看free相关的信息3.2 以MB的形式显示内存的使用情况3.3 以总和的形式显示内存的使用情况3.4 周期性的查询内存的使用情况3.5 以更人性化的形式来查看内存的结果输出四. free在脚本中的应用总结前言 大家…...

嵌入式入门必看!调试工具安装——基于 AM64x核心板
本章节内容是为评估板串口安装USB转串口驱动程序。驱动适用于CH340、CH341等USB转串口芯片。 USB转串口驱动安装 适用安装环境:Windows 7 64bit、Windows 10 64bit。 本文测试板卡为创龙科技SOM-TL64x核心板,它是一款基于TI Sitara系列AM64x双核ARM Cortex-A53 + 单/四核Cort…...

JAVA开发(java类加载过程)
1、java语言的平台无关性。 因为java语言可以跑在java虚拟机上,所以只要能装java虚拟机的地方就能跑java程序。java语言以后缀名 .java为文件扩展名。通过java编译器javac编译成字节码文件.class 。java字节码文件通过java虚拟机解析运行。所以java语言可以说是编译…...

【vulhub漏洞复现】Thinkphp 2.x 任意代码执行
一、漏洞详情影响版本 thinkphp 2.x但是由于thinkphp 3.0版本在Lite模式下没有修复该漏洞,所以也存在该漏洞漏洞原因:e 和 /e模式匹配路由:e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行; /e 可执行模式,…...

LeetCode 1145. 二叉树着色游戏 -- 简单搜索
二叉树着色游戏 提示 中等 199 相关企业 有两位极客玩家参与了一场「二叉树着色」的游戏。游戏中,给出二叉树的根节点 root,树上总共有 n 个节点,且 n 为奇数,其中每个节点上的值从 1 到 n 各不相同。 最开始时: 「一…...
HyperGBM的三种Early Stopping方式
本文作者:杨健,九章云极 DataCanvas 主任架构师 很多机器学习框架如都提供了Early Stopping策略,主要用来防止模型过拟合。和模型训练提前停止的目标不同,AutoML的Early Stopping策略更多考虑的是算力消耗和模型质量的平衡。 通…...

心系区域发展,高德用一体化出行服务平台“聚”力区域未来
交通,是城市的血脉。通过对人、资源、产业的连接,交通建设往往是城市和区域经济发展的前提。不过,在度过了“要想富,先修路”的初级建设阶段后,交通产业内部也出现了挑战,诸如城市秩序、发展成本、用户使用…...

AI画图_stable-diffusion-webui安装使用指南(1)
本文章适用于: 有一定学习能力和钻研能力,遇到问题能合理使用搜索引擎尝试解决问题的人想在windows系统中尝试使用AI作画工具stable-diffusion-webui进行绘画的人有一定的计算机基础(会魔法上网、知道 python和Git)和英文阅读能力的人显卡为…...

浅谈MySQL主从复制
目录 1.MySQL主从复制是什么 2.MySQL主从复制的意义 3.MySQL主从复制原理 4.数据同步一致性问题 5.实现方式 1.MySQL主从复制是什么 MySQL主从复制就是指数据可以从一台MySQL的主节点复制到一个或多个从节点。 MySQL默认采用异步复制方式,这样从节点不用一直访…...

docker-compose安装kafka和php简单测试
docker-compose.yml内容: version: 3.1 services: zookeeper: container_name: zookeeper image: zookeeper:3.6 ports: - 2181:2181 kafka: image: wurstmeister/kafka container_name: kafka depends_on: - zookeeper …...
【蓝桥云课】快速幂
问题描述:快速求aba^bab 方法一:常规方法相乘a∗a∗a∗a∗...∗aa*a*a*a*...*aa∗a∗a∗a∗...∗a 方法二:分治方法求aba^bab ab{1,b0a,b1ab2⋅ab2,b为偶数ab−12⋅ab12,b为奇数a^b\begin{cases} 1& \text{,b0}\\ a& \text{,b1}\\ a…...

解决windows安装wxPython安装失败、速度过慢及PyCharm上wx包爆红问题
网上关于wxPython安装失败,安装速度过慢,以及安装成功后PyCharm中import wx仍然爆红的文章有很多,也特别杂,解决起来特别困难,今天在这里对问题的处理进行一个整合,希望能帮助到大家。 安装wxPython这里运用…...

封装小程序request请求[接口函数]
在这篇小程序API的Promise化文章中讲到小程序官方提供的异步API都是基于回调函数来实现的,在大量的使用这种回调函数就会造成回调地狱的问题,以及代码的可读性和可维护性差,通过对小程序API的Promise化能解决,那么本篇是来讲进行对…...

嵌入式 STM32 通讯协议--MODBUS
目录 一、自定义通信协议 1、协议介绍 2、网络协议 3、自定义的通信协议 二、MODBUS通信协议 1、概述 2、MODBUS帧结构 协议描述 3、MODBUS数据模型 4、MODBUS事务处理的定义 5、MODBUS功能码 6、功能码定义 7、MODBUS数据链路层 8、MODBUS地址规则 9、MO…...

互联网人看一看,这些神器你用过哪些?
很多小伙伴在剪辑视频的过程中经常可以看到一些语音素材,经常刷视频的小伙伴也可以看到很多视频中经常出现一些AI合成的声音或者音效,这些配音可以给视频增添很多亮点!那么大家都是怎么将文字转语音的呢?今天给大家分享5款非常专业…...

Kotlin学习:5.2、异步数据流 Flow
Flow一、Flow1、Flow是什么东西?2、实现功能3、特点4、冷流和热流5、流的连续性6、流的构建器7、流的上下文8、指定流所在协程9、流的取消9.1、超时取消9.2、主动取消9.3、密集型任务的取消10、背压和优化10.1、buffer 操作符10.2、 flowOn10.3、conflate 操作符10.…...

EPICS synApps介绍
一、synApps是什么? 1) 一个用于同步束线用户的EPICS模块集合。 2) EPICS模块 alive, autosave, busy, calc, camac, caputRecorder, dac128V, delaygen, dxp, ip, ip330, ipUnidig, love, mca, measComp, modbus, motor, optics, quadEM,…...

Pycharm和跳板机 连接内网服务器
Pycharm和跳板机 连接内网服务器 建立配置文件 本地配置 .ssh 文件夹下配置 config 文件 Host jumpHostName xxxPort 22User xxxServerAliveInterval 30IdentityFile C:\Users\15284\.ssh\id_rsa # 通过密钥连接Host server # 同样,任意名字,随…...

mysql去重查询的三种方法
文章目录前言一、插入测试数据二、剔除重复数据方法1.方法一:使用distinct2.方法二:使用group by3.方法三:使用开窗函数总结前言 数据库生成环境中经常会遇到表中有重复的数据,或者进行关联过程中产生重复数据,下面介…...

PHP反序列化
文章目录简介POP链构造和Phar://题目[CISCN2019 华北赛区 Day1 Web1]Dropbox字符串逃逸简介 php序列化的过程就是把数据转化成一种可逆的数据结构,逆向的过程就叫做反序列化。 php将数据序列化和反序列化会用到两个函数: serialize 将对象格式化成有序的…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
32位寻址与64位寻址
32位寻址与64位寻址 32位寻址是什么? 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元(地址),其核心含义与能力如下: 1. 核心定义 地址位宽:CPU或内存控制器用32位…...

高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。
2024 年,高端封装市场规模为 80 亿美元,预计到 2030 年将超过 280 亿美元,2024-2030 年复合年增长率为 23%。 细分到各个终端市场,最大的高端性能封装市场是“电信和基础设施”,2024 年该市场创造了超过 67% 的收入。…...

如何做好一份技术文档?从规划到实践的完整指南
如何做好一份技术文档?从规划到实践的完整指南 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…...