linux中free命令怎么使用

linux中,free是查看内存使用状态的内置命令,可以显示包括系统物理内存、虚拟内存(swap交换分区)、共享内存和系统缓存的使用情况,语法“free [选项]”;free命令的输出和top命令的内存部分非常相似。

Linux free命令:查看内存使用状态

free 命令用来显示系统内存状态,包括系统物理内存、虚拟内存(swap 交换分区)、共享内存和系统缓存的使用情况,其输出和 top 命令的内存部分非常相似。

free 命令的基本格式如下:

# free [选项]

表 1 罗列出了此命令常用的选项及各自的含义。

表 1 free 命令常用选项及含义

选项含义-b以 Byte(字节)为单位,显示内存使用情况。-k以 KB 为单位,显示内存使用情况,此选项是 free 命令的默认选项。-m以 MB 为单位,显示内存使用情况。-g以 GB 为单位,显示内存使用情况。-t在输出的最终结果中,输出内存和 swap 分区的总量。-o不显示系统缓冲区这一列。-s 间隔秒数根据指定的间隔时间,持续显示内存使用情况。

free 命令可以显示系统中剩余及已用的物理内存和交换内存,以及共享内存和被核心使用的缓冲区。

linux中free命令怎么使用

如果加上 -h 选项,输出的结果会友好很多:

linux中free命令怎么使用

有时我们需要持续的观察内存的状况,此时可以使用 -s 选项并指定间隔的秒数:

$ free -h -s 3

linux中free命令怎么使用

上面的命令每隔 3 秒输出一次内存的使用情况,直到你按下 ctrl + c。

由于 free 命令本身比较简单,所以本文的重点会放在如何通过 free 命令了解系统当前的内存使用状况。

输出简介

下面先解释一下输出的内容:

Mem 行(第二行)是内存的使用情况。

Swap 行(第三行)是交换空间的使用情况。

total 列显示系统总的可用物理内存和交换空间大小。

百度文心百中 百度文心百中

百度大模型语义搜索体验中心

百度文心百中 22 查看详情 百度文心百中

used 列显示已经被使用的物理内存和交换空间。

free 列显示还有多少物理内存和交换空间可用使用。

shared 列显示被共享使用的物理内存大小。

buff/cache 列显示被 buffer 和 cache 使用的物理内存大小。

available 列显示还可以被应用程序使用的物理内存大小。

我想只有在理解了一些基本概念之后,上面的输出才能帮助我们了解系统的内存状况。

buff/cache

先来提一个问题: buffer 和 cache 应该是两种类型的内存,但是 free 命令为什么会把它们放在一起呢?要回答这个问题需要我们做些准备工作。让我们先来搞清楚 buffer 与 cache 的含义。

buffer 在操作系统中指 buffer cache, 中文一般翻译为 “缓冲区”。要理解缓冲区,必须明确另外两个概念:”扇区” 和 “块”。扇区是设备的最小寻址单元,也叫 “硬扇区” 或 “设备块”。块是操作系统中文件系统的最小寻址单元,也叫 “文件块” 或 “I/O 块”。每个块包含一个或多个扇区,但大小不能超过一个页面,所以一个页可以容纳一个或多个内存中的块。当一个块被调入内存时,它要存储在一个缓冲区中。每个缓冲区与一个块对应,它相当于是磁盘块在内存中的表示(下图来自互联网):

linux中free命令怎么使用

注意,buffer cache 只有块的概念而没有文件的概念,它只是把磁盘上的块直接搬到内存中而不关心块中究竟存放的是什么格式的文件。

cache 在操作系统中指 page cache,中文一般翻译为 “页高速缓存”。页高速缓存是内核实现的磁盘缓存。它主要用来减少对磁盘的 I/O 操作。具体地讲,是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。页高速缓存缓存的是内存页面。缓存中的页来自对普通文件、块设备文件(这个指的就是 buffer cache 呀)和内存映射文件的读写
页高速缓存对普通文件的缓存我们可以这样理解:当内核要读一个文件(比如 /etc/hosts)时,它会先检查这个文件的数据是不是已经在页高速缓存中了。如果在,就放弃访问磁盘,直接从内存中读取。这个行为称为缓存命中。如果数据不在缓存中,就是未命中缓存,此时内核就要调度块 I/O 操作从磁盘去读取数据。然后内核将读来的数据放入页高速缓存中。这种缓存的目标是文件系统可以识别的文件(比如 /etc/hosts)。
页高速缓存对块设备文件的缓存就是我们在前面介绍的 buffer cahce。因为独立的磁盘块通过缓冲区也被存入了页高速缓存(缓冲区最终是由页高速缓存来承载的)。

到这里我们应该搞清楚了:无论是缓冲区还是页高速缓存,它们的实现方式都是一样的。缓冲区只不过是一种概念上比较特殊的页高速缓存罢了。
那么为什么 free 命令不直接称为 cache 而非要写成 buff/cache? 这是因为缓冲区和页高速缓存的实现并非天生就是统一的。在 linux 内核 2.4 中才将它们统一。更早的内核中有两个独立的磁盘缓存:页高速缓存和缓冲区高速缓存。前者缓存页面,后者缓存缓冲区。当你知道了这些故事之后,输出中列的名称可能已经不再重要了。

free 与 available

在 free 命令的输出中,有一个 free 列,同时还有一个 available 列。这二者到底有何区别?
free 是真正尚未被使用的物理内存数量。至于 available 就比较有意思了,它是从应用程序的角度看到的可用内存数量。Linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的 buffer 和 cache。所以对于内核来说,buffer 和 cache 都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available  = free + buffer + cache。请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差。

交换空间(swap space)

swap space 是磁盘上的一块区域,可以是一个分区,也可以是一个文件。所以具体的实现可以是 swap 分区也可以是 swap 文件。当系统物理内存吃紧时,Linux 会将内存中不常访问的数据保存到 swap 上,这样系统就有更多的物理内存为各个进程服务,而当系统需要访问 swap 上存储的内容时,再将 swap 上的数据加载到内存中,这就是常说的换出和换入。交换空间可以在一定程度上缓解内存不足的情况,但是它需要读写磁盘数据,所以性能不是很高。

现在的机器一般都不太缺内存,如果系统默认还是使用了 swap 是不是会拖累系统的性能?理论上是的,但实际上可能性并不是很大。并且内核提供了一个叫做 swappiness 的参数,用于配置需要将内存中不常用的数据移到 swap 中去的紧迫程度。这个参数的取值范围是 0~100,0 告诉内核尽可能的不要将内存数据移到 swap 中,也即只有在迫不得已的情况下才这么做,而 100 告诉内核只要有可能,尽量的将内存中不常访问的数据移到 swap 中。在 ubuntu 系统中,swappiness 的默认值是 60。如果我们觉着内存充足,可以在 /etc/sysctl.conf 文件中设置 swappiness:

vm.swappiness=10

如果系统的内存不足,则需要根据物理内存的大小来设置交换空间的大小。具体的策略网上有很丰富的资料,这里笔者不再赘述。

/proc/meminfo 文件

其实 free 命令中的信息都来自于 /proc/meminfo 文件。/proc/meminfo 文件包含了更多更原始的信息,只是看起来不太直观:

$ cat /proc/meminfo

linux中free命令怎么使用

有兴趣的同学可以直接查看这个文件。

以上就是linux中free命令怎么使用的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/246135.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月4日 03:35:52
下一篇 2025年11月4日 03:39:35

相关推荐

  • 国内 Python 镜像源配置方法

    配置国内镜像源可解决pip安装慢的问题,推荐使用阿里云、清华、中科大等镜像;可通过临时命令或永久修改pip.ini/pip.conf文件配置,Windows在C:Users用户名pip下创建pip.ini,Linux/macOS在~/.pip/pip.conf中设置index-url和trusted…

    2025年12月14日
    000
  • Python 虚拟环境 venv 的使用详解

    venv是Python内置的虚拟环境工具,用于隔离项目依赖。使用python -m venv myenv创建环境,通过activate激活后可独立安装包,避免冲突。开发中应将虚拟环境加入.gitignore,推荐命名.venv,并用requirements.txt管理依赖,最后用deactivate…

    2025年12月14日
    000
  • Python 2.6 环境下 Pip 的兼容性安装与离线使用指南

    本文详细阐述了在Python 2.6环境下安装包管理工具Pip的步骤。由于Python 2.6的生命周期已结束,直接使用最新版安装脚本会遭遇兼容性问题。教程指导用户安装特定旧版本的setuptools (36.8.0) 和 pip (9.0.3)。同时,文章探讨了由于旧版OpenSSL导致的PyPI…

    2025年12月14日
    000
  • 在 Python 2.6 环境中安装和使用 Pip 的兼容性指南

    本教程详细指导了如何在 Python 2.6 环境下成功安装和配置 Pip 包管理器。鉴于 Python 2.6 已是旧版本,标准的安装方法不再适用。核心解决方案是使用特定兼容的旧版 Setuptools (36.8.0) 和 Pip (9.0.3),并通过手动下载并离线安装的方式进行。文章还特别强…

    2025年12月14日
    000
  • 在Python 2.6环境下安装pip的完整指南

    本教程详细阐述了如何在Python 2.6环境中成功安装包管理工具pip。鉴于Python 2.6的特殊性,需要安装特定旧版本的setuptools和pip。文章提供了详细的下载链接、安装步骤,并强调了因旧版OpenSSL导致无法直接连接PyPI的限制及应对策略,确保用户能在此旧环境中进行包管理。 …

    2025年12月14日
    000
  • 在 Python 2.6 环境中安装 Pip 的详细教程与注意事项

    本教程旨在指导用户如何在 Python 2.6 环境中成功安装和配置 Pip 包管理器。由于 Python 2.6 已停止维护,直接使用最新版 get-pip.py 会失败。文章将详细介绍如何安装兼容的 setuptools 和 pip 旧版本,并阐述在使用过程中可能遇到的 HTTPS 连接限制及相…

    2025年12月14日
    000
  • python中怎么安装第三方库_Python使用pip安装第三方库教程

    使用pip安装Python第三方库最方便,通过命令行输入pip install 库名即可从PyPI下载安装,支持指定版本、批量安装及换源加速,配合virtualenv或conda可有效管理环境和依赖。 直接点说,Python安装第三方库,用pip!这是最常用也最方便的方法。就像给你的Python装上…

    2025年12月14日
    000
  • 使用 WSL(Windows 子系统)运行 Python 的优势

    WSL提供与生产环境一致的Linux开发体验,避免路径、权限差异问题;支持Unix工具链和依赖管理,简化Python库安装;性能接近原生Linux,多进程和文件I/O表现优异;可无缝集成VS Code等Windows工具,实现高效协作。 在 Windows 上使用 WSL(Windows Subsy…

    2025年12月14日
    000
  • 初学者如何配置 Python 开发 IDE(VS Code、PyCharm)

    初学者配置Python开发环境首选VS Code或PyCharm。先从python.org安装Python并添加到PATH,验证安装后,在VS Code中安装官方Python扩展,选择解释器并运行.py文件,可选装pylint和black工具;PyCharm用户则下载Community版,设置项目解…

    2025年12月14日
    000
  • python中怎么把字典写入CSV文件?

    使用DictWriter可自动处理字典键到CSV列的映射,支持定义列序、忽略多余键(extrasaction=’ignore’)、填充缺失值(restval=’N/A’),并避免手动转换数据结构;配合encoding=’utf-8&#821…

    2025年12月14日
    000
  • cv2库如何安装pycharm

    答案:在PyCharm中安装cv2库需确保包安装到项目使用的Python解释器环境,推荐通过PyCharm的Settings进入Python Interpreter页面,点击“+”号搜索并安装opencv-python;或使用PyCharm内置Terminal执行pip install opencv…

    2025年12月14日
    000
  • Python高效获取动态黄金价格数据:API调用实践

    本教程旨在解决使用Python爬取动态加载的黄金价格数据时遇到的常见问题。传统网页抓取方法(如requests结合BeautifulSoup)在面对JavaScript动态渲染的内容时往往失效。文章核心在于揭示goldprice.org等网站通过AJAX API提供实时数据,并详细指导如何直接调用这…

    2025年12月14日
    000
  • python中怎么连接MySQL数据库_Python使用PyMySQL连接MySQL数据库教程

    答案:使用PyMySQL连接MySQL是Python中最常用且推荐的方式,因其纯Python实现、兼容性好、安装简便且支持DB-API 2.0规范。通过pymysql.connect()建立连接,配合参数化查询防止SQL注入,使用DictCursor获取字典结果,并在异常处理中确保连接关闭。实际项目…

    2025年12月14日
    000
  • 解决Python中Mesh-to-SDF安装时由sklearn引起的错误

    本教程旨在解决在Python环境中安装mesh-to-sdf库时,因依赖包sklearn引发的安装失败问题。核心在于sklearn是一个已弃用的包名,正确的应是scikit-learn。文章将详细指导如何通过正确安装依赖、修改项目配置或设置环境变量等多种方法,有效解决此错误,确保mesh-to-sd…

    2025年12月14日
    000
  • 解决Python csv.writer 生成CSV文件中的空白行问题

    本文探讨了Python csv.writer 在生成CSV文件时出现额外空白行的常见问题及其解决方案。默认情况下,csv.writer 使用 rn 作为行终止符,这在某些操作系统或文本编辑器中可能被误解为两个换行符,从而导致每行之间出现空白。通过在 csv.writer 中明确指定 lineterm…

    2025年12月14日
    000
  • 将OpenAI ChatGPT集成到HTML网页的完整指南

    本文旨在指导开发者如何将基于OpenAI API的ChatGPT模型集成到HTML网页中。通过结合Python后端和JavaScript前端,实现用户在网页上与ChatGPT进行实时对话的功能。教程将详细介绍如何搭建后端API、处理前后端通信,以及在HTML页面上展示聊天内容。 1. 架构概述 将C…

    2025年12月14日
    000
  • python中怎么用Flask创建一个简单的网页?

    答案:用Flask搭建网页只需安装Flask、创建app.py定义路由和视图函数,运行后即可在浏览器访问;通过@app.route可设置不同URL路径和请求方法,支持动态变量和POST/GET处理;使用Jinja2模板引擎将HTML分离,通过render_template传递数据,提升页面复杂度和可…

    2025年12月14日 好文分享
    000
  • 解决 tokenizers==0.12.1 安装与 Rust 兼容性问题的教程

    本文旨在解决 tokenizers 包特定版本(如 0.12.1)在较新 Rust 编译器环境下安装失败的问题。核心原因在于 Rust 编译器的严格性更新导致旧版 tokenizers 代码不再兼容。教程提供了两种主要解决方案:一是升级 tokenizers 及其相关依赖(如 transformer…

    2025年12月14日
    000
  • Python怎么安装pip_Python包管理工具pip安装指南

    首先检查pip是否安装并更新至最新版本,使用python -m pip –version确认存在后,通过python -m pip install –upgrade pip升级;若未安装,则下载get-pip.py脚本并运行安装。确保pip在PATH环境变量中,可通过whic…

    2025年12月14日
    000
  • Python虚拟环境与依赖管理:构建隔离且可复现的项目环境

    Python虚拟环境是项目依赖管理的基石,它通过创建独立环境避免不同项目间的依赖冲突。本文将详细介绍如何创建、激活、使用虚拟环境安装项目依赖,并通过requirements.txt文件实现环境的共享与复现,确保项目开发的稳定性和一致性。 一、为何需要虚拟环境? 在python项目开发中,不同的项目可…

    2025年12月14日
    000

发表回复

登录后才能评论
关注微信