实战|掌握Linux内存监视:free命令详解与使用技巧

news2024/11/25 23:42:24

在这里插入图片描述

文章目录

  • 前言
  • 一. 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 --help

Usage:
 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 ~]# free
              total        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 -m
              total        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 -t
              total        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 5
              total        used        free      shared  buff/cache   available
Mem:        1863252      833220      376152      134604      653880      657072
Swap:       2097148       29448     2067700

              total        used        free      shared  buff/cache   available
Mem:        1863252      833220      376152      134604      653880      657072
Swap:       2097148       29448     2067700


可以看到每五秒钟会跳一次,也就是查询一次。

3.5 以更人性化的形式来查看内存的结果输出

此处我们用到 -h参数

[root@mufeng ~]# free -h
              total        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/bash

THRESHOLD=80 # 内存使用率超过80%时发出警告

while true
do
  OUTPUT=$(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 ]; then
    echo "警告!内存使用率超过 $THRESHOLD% 在 $DATE!"
  fi

  sleep 10
done

脚本解释:

  1. THRESHOLD=80:定义一个变量THRESHOLD,表示内存使用率的阈值,即当内存使用率超过80%时发出警告。

  2. while true:无限循环,不停地监视内存使用情况。

  3. OUTPUT=$(free | grep Mem):执行free命令,并使用grep命令过滤出其中包含“Mem”的行,将输出结果赋值给变量OUTPUT。

  4. TOTAL=$(echo $OUTPUT | awk ‘{print $2}’):使用echo和awk命令从变量OUTPUT中提取出物理内存总量,将结果赋值给变量TOTAL。

  5. USED=$(echo $OUTPUT | awk ‘{print $3}’):使用echo和awk命令从变量OUTPUT中提取出已使用的物理内存量,将结果赋值给变量USED。

  6. FREE=$(echo $OUTPUT | awk ‘{print $4}’):使用echo和awk命令从变量OUTPUT中提取出尚未使用的物理内存量,将结果赋值给变量FREE。

  7. PERCENTAGE=$((USED*100/TOTAL)):计算内存使用率的百分比,将结果赋值给变量PERCENTAGE。

  8. DATE=$(date):获取当前系统时间,将结果赋值给变量DATE。

  9. if [ $PERCENTAGE -gt $THRESHOLD ]; then:如果内存使用率超过阈值,即PERCENTAGE大于THRESHOLD,则执行下一步。

  10. echo “警告!内存使用率超过 $THRESHOLD% 在 $DATE!”:在控制台上输出警告信息,包括当前时间和内存使用率。

  11. sleep 10:休眠10秒,等待下一次监视。

总结

free命令在日常工作中,应用的比较广泛,一定要认真学习,记熟记牢常用参数。

💕💕💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!✨ ✨ ✨
🍻🍻🍻如果你喜欢的话,就不要吝惜你的一键三连了~

请添加图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/377544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LAMP项目部署实战2

部署Discuz!论坛 一、Discuz&#xff01;论坛概述&#xff1a; 1&#xff09;Discuz&#xff01;论坛是基于phpmysql进行开发的一套开源的论坛系统。 2&#xff09;下载源代码&#xff1a; 下载地址&#xff1a;码云DiscuzX: Discuz! X 官方 Git&#xff0c;简体中文 UTF8 版…

2023年,35岁测试工程师只能被“优化裁员”吗?肯定不是····

国内的互联网行业发展较快&#xff0c;所以造成了技术研发类员工工作强度比较大&#xff0c;同时技术的快速更新又需要员工不断的学习新的技术。因此淘汰率也比较高&#xff0c;超过35岁的基层研发类员工&#xff0c;往往因为家庭原因、身体原因&#xff0c;比较难以跟得上工作…

mongo数据备份

目录1. mongo单机安装2. mongo(replica set)部署3. mongodump 与 mongorestore工具使用4.rsync工具使用服务端配置客户端配置客户端推送与拉取文件5. 完整mongo全量备份脚本恢复全量备份数据6. 完整mongo增量备份脚本(基于oplog)恢复增量备份数据7.备份策略1. mongo单机安装 m…

高数:极限的定义

目录 极限的定义&#xff1a; 数列极限的几何意义&#xff1a; 由极限的定义得出的极限的两个结论&#xff1a; ​编辑 极限的第三个结论&#xff1a; 例题 方法1&#xff1a; ​编辑 方法2&#xff1a; ​编辑 方法3&#xff1a; ​编辑 极限的定义&#xff1a; 如何理…

JDK8常用新特性的原理与代码演示

Lambda Lambda 表达式&#xff0c;也可称为闭包&#xff0c;Lambda 允许把函数作为一个方法的参数。 格式 (参数列表) -> {代码块} (parameters) -> expression 或 (parameters) ->{ statements; }前置条件 lambda表达式是一段执行某种功能的代码块&#xff0c;需要…

数据结构与算法——4时间复杂度分析2(常见的大O阶)

这篇文章是时间复杂度分析的第二篇。在前一篇文章中&#xff0c;我们从0推导出了为什么要用时间复杂度&#xff0c;时间复杂度如何分析以及时间复杂度的表示三部分内容。这篇文章&#xff0c;是对一些常用的时间复杂度进行一个总结&#xff0c;相当于是一个小结论 1.常见的大O…

ESFP型人格的特征,ESFP型人格的优势和劣势分析

ESFP型人格的特征ESFP&#xff08;表演者型人格&#xff09;是人群中的开心果。他们外向&#xff0c;友善&#xff0c;包容&#xff0c;有他们在的地方总是充满着活泼的氛围。ESFP对于新的朋友&#xff0c;新的环境适应良好&#xff0c;他们是完完全全的社交动物&#xff0c;对…

【数据库原理 | MySQL】一文打通 DDL语句

&#x1f935;‍♂️ 个人主页: 计算机魔术师 &#x1f468;‍&#x1f4bb; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 书接上文介绍了数据库的前世今生&#xff0c;本文讲解SQL语句中的DDL语句 文章目录二、SQL2.1 SQL通用语法2.2 SQL的分类三、 …

I.MX6ULL_Linux_系统篇(19) kernel编译及Makefile分析

Linux 内核 Linux 由 Linux 基金会管理与发布&#xff0c; Linux 官网为 https://www.kernel.org&#xff0c;所以你想获取最新的Linux 版本就可以在这个网站上下载&#xff0c;网站界面如图所示&#xff1a; 从图中可以看出最新的稳定版 Linux 已经到了 6.2&#xff0c;NXP …

Python常用标准库-sys库一文详解

目录 前言 一、Sys库概述 二、Sys查看版本信息 1.sys.version获取Python版本信息 2.sys.api_version获取解释器中C的API版本 3.sys.getwindowsversion系统功能版本 4.sys.hexversion()获取Python解释器的版本值 5.sys.implementation获取当前正在运行的Python解释器的实现…

Redis源码---如何实现一个性能优异的Hash表

目录 前言 Redis 如何实现链式哈希&#xff1f; 什么是哈希冲突&#xff1f; 链式哈希如何设计与实现&#xff1f; Redis 如何实现 rehash&#xff1f; 什么时候触发 rehash&#xff1f; rehash 扩容扩多大&#xff1f; 渐进式 rehash 如何实现&#xff1f; 前言 Hash …

数据处理 |遍历所有文件夹及子目录文件夹方法总结与实例代码详解

深度学习中不可避免的数据预处理~1. glob.glob()方法 2. pathlib中的Path方法3. os.walk()方法1. glob.glob()方法 语法glob.glob(pathname)&#xff08;多指定文件类型&#xff0c;查找jpg,png,txt,json等&#xff09;缺点&#xff1a;查找文件较慢2. 路径操作库pathlib中的Pa…

【计算机三级网络技术】 第四篇 路由设计技术基础

文章目录一、分组转发二、路由选择1.理想的路由算法的基本特征2.路由算法的度量标准3.路由算法分类&#xff1a;4.IP路由选择与路由汇聚(重点)三、自治系统与Internet的路由选择协议1.自治系统2.路由选择协议的分类四、内部网关协议1.RIP的基本概念2.RIP的原理3.RIP的运行过程五…

Android Lmkd 低内存终止守护程序

一、低内存终止守护程序 Android 低内存终止守护程序 (lmkd) 进程可监控运行中的 Android 系统的内存状态&#xff0c;并通过终止最不必要的进程来应对内存压力大的问题&#xff0c;使系统以可接受的性能水平运行。 所有应用进程都是从zygote孵化出来的&#xff0c;记录在AMS…

Android问题笔记 - 打开Android Studio先弹出项目选择框

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断…

leetcode 427. Construct Quad Tree(构建四叉树)

刚看到题的时候是懵的&#xff0c;这也太长了。到底是要表达什么呢。 不妨把这个矩阵看成一个正方形的图片&#xff0c;想象你在处理图片&#xff0c;从整体逐步到局部。 刚开始看一整张图片&#xff0c;如果是全0或全1&#xff0c;这个就是叶子节点&#xff0c;怎么表达叶子节…

网络货运平台“降本提质引流增值”秘籍是什么?

2月24日&#xff0c;2022&#xff08;第五届&#xff09;中国网络货运平台年会在厦门举行&#xff0c;数据宝作为中物联副会长单位受邀参加峰会&#xff0c;数据宝轮值CEO肖斌发表题为“网络货运平台数字化创新应用实践分享”的主题分享。 据交通运输部统计&#xff0c;截止到2…

某建筑设计研究院“综合布线管理软件”应用实践

某建筑设计研究院有限公司&#xff08;简称“某院”&#xff09;隶属于国务院国资委直属的大型骨干科技型中央企业。“某院”前身为中央直属设计公司&#xff0c;创建于1952年。成立近70年来&#xff0c;始终秉承优良传统&#xff0c;致力于推进国内勘察设计产业的创新发展&…

CASENet中edge GT是如何产生的

1&#xff1a;首先下载cityscape数据集&#xff0c;包含两个大文件夹&#xff0c;具体的数据集介绍参考此链接。cityscape数据集解析 看一下gtFine子文件夹&#xff0c;另一个也是同理&#xff1a; 2&#xff1a;将下载好的数据集放到data_orig中&#xff0c;还有一个文件…

报错记录:element-admin框架打包后静态文件加载异常与登录异常解决方案

报错记录&#xff1a;element-admin框架打包后静态文件加载异常与登录异常解决方案 一、静态文件加载异常解决方案 二、登录异常解决方案 现象 element-admin如果用 electron 打包 是会有个问题&#xff1a; electron serve 运行没问题 electron build 打release 包 就会出错…