首页 > 其他分享 >[转帖]剖析free命令

[转帖]剖析free命令

时间:2024-06-20 13:21:32浏览次数:26  
标签:剖析 cached Linux free 转帖 内存 line1 buffers

https://perthcharles.github.io/2015/09/28/wiki-tool-free/

 

 

Linux中有许多的查看系统状态的命令,但是如果没有一些相关的背景知识就很容易
造成误解。free命令就是一个明显的例子。本系列wiki就结合一些好的资料并
结合自身理解来尝试剖析一些常用又常被误解的Linux命令。


本文最要参考这篇好文,英文无压力的建议再读读原文。


从一则free使用实例说开

# free
             total       used       free     shared    buffers     cached
Mem:      16426628   16372464      54164          0      35408   10861984
-/+ buffers/cache:    5475072   10951556
Swap:     32764556    7985476   24779080

第一行和第三行字面意思都好立即,第二行往往很多人不理解。主要是看不懂”-/+ buffers/cache”
到底是什么鬼。
也正是很多人不理解第二行,往往看到类似上面的free结果后,就认为系统已经没有空闲内存给新进程使用了。
下面给出一个计算公式,基本一看就能懂了。

line1[used] - (line1[buffers] + line1[cached]) = line2[used]
line1[total] - line2[used] = line2[free]

根据实例验证一下

16372464 - (35408 + 10861984) = 5475072
16426628 - 5475072 = 10951556

那么当有人问起,看到这样一个free结果时,系统还有多少可用的空闲内存呢(free RAM available) ?
我们的回答应该是line2[free]而不是line1[free]。下面会详细解释。


buffers和cached到底是什么

buffers是被一个特定进程使用的用于临时存放数据的内存空间,这些内容不会被其他进程访问。
这篇文章用了带宽的概念来
类比,非常贴切。
当你试图通过网络发送大量的突发数据时,如果网卡的带宽(capacity)仅支持发送一部分时,
它会将剩下的数据存在buffers中,用于后续发送。

而cached用于存放频繁访问的一些数据,目的是做到更快的数据访问。
比如多个进程需要读同一个文件,此时内存可能就分配一片cached区域,用于作为CPU到磁盘
之间的cache。

buffers和cached的区别:
a. buffers是供单个进程使用的,而cached可供多个进程使用
b. buffers是一次性的,而cached是可以反复使用的
buffers和cached的共同之处就在于它们都是临时性的存储,如果后续有进程需要使用
这些内存空间,Linux会释放(free)这些临时性占用的内存。


swap分区

swap分区的目的是将一些不被频繁访问的内存数据放到磁盘,但是当需要时又能尽快的恢复到内存中去


参考资料

Understanding free command in Linux/Unix
Linux ate my ram! Don’t Panic! Your ram is fine!
Experiments and fun with the Linux disk cache

标签:剖析,cached,Linux,free,转帖,内存,line1,buffers
From: https://www.cnblogs.com/jinanxiaolaohu/p/18258455

相关文章

  • 探索 v-on 之奥秘一:事件及各类修饰符的深度剖析与案例展示
    目录v-on介绍v-on事件修饰符e.stopPropagation()、.stop、.self​​​​​​​capture​​​​​​​e.preventDefault()、.prevent​​​​​​​.once​​​​​​​.passivev-on介绍        在Vue中,v-on乃是其所提供的用于事件绑定的一种机制,比如要......
  • 剖析 Kafka 消息丢失的原因
    文章目录前言一、生产者导致的消息丢失的场景场景1:消息太大解决方案:1、减少生产者发送消息体体积2、调整参数max.request.size场景2:异步发送机制解决方案:1、使用带回调函数的发送方法场景3:网络问题和配置不当解决方案:1、设置`acks`参数设置为"all"2、设置重试参数......
  • 一个案例,剖析攻防演练中威胁溯源的正确姿势
    一年一度的攻防演练即将拉开帷幕。“威胁溯源”一直是演练活动中一个十分重要的工作项,它不仅有助于理解和分析攻击的来源、方法和动机,还能够显著提升整体安全防护水位,提升组件与人员的联动协作能力。在真实的攻击场景中,溯源工作还能造成对攻击者的威慑,进一步净化网络安全空间。......
  • 04_VACUUM 剖析
    04_VACUUM剖析VACUUM剖析为什么需要VacuumMVCCMVCC:Multi-VersionConcurrencyControl,即多版本并发控制。PostgreSQL使用多版本并发控制(MVCC)来支持高并发的事务处理,同时保持数据的一致性和隔离性。MVCC是一种用于管理数据库并发操作的技术,它允许多个事务同时访问同一数......
  • 【转】大众点评CAT开源监控系统剖析
    https://www.cnblogs.com/yeahwell/p/cat.html 参考文档:大众点评的实时监控系统分析(一)CAT_source_analyze透过CAT,来看分布式实时监控系统的设计与实现深度剖析开源分布式监控CAT[分布式监控CAT]Client端源码解析大众点评Cat--架构分析大众点评Cat--Server模块架构分析......
  • [转帖]Redis中删除过期Key的三种策略
    Redis对于过期键有三种清除策略被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key主动删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动随机淘汰一批已过期的key当前已用内存超过maxmemory限定时,触发主动清理策......
  • [转帖]springboot中Hikari连接池常用参数含义(一)
    <divid="content_views"class="htmledit_views"><p>yml配置<br><imgalt=""height="235"src="https://img-blog.csdnimg.cn/7724916bc5d449b48114ed52462ba48d.png"......
  • [转帖]JDBC 驱动程序类型
    https://www.jianshu.com/p/fce9ac03a250 什么是JDBC驱动说白了JDBC驱动就是一组实现了JDBCAPI接口的Java类的集合,该接口用于与数据库服务器进行交互。例如,使用JDBC驱动程序可以让你打开数据库连接,并通过发送SQL或数据库命令,然后通过Java接收结果。JDK中的......
  • [转帖]深入理解JDBC的超时设置
     https://www.cnblogs.com/Chary/articles/14958848.html 这是最近读到的讲关于JDBC的超时问题最透彻的文章,原文是http://www.cubrid.org/blog/understanding-jdbc-internals-and-timeout-configuration ,网上现有的翻译感觉磕磕绊绊的,很多上下文信息丢失了,这里用我......
  • 使用pkg -r 命令选项向jail虚拟子系统里安装软件@FreeBSD
    刷FreeBSD论坛的时候,看到这样一招:使用pkg-r选项,往jail等虚拟机子系统里安装软件。jails-Howtoinstallapkgofflineintoajail?|TheFreeBSDForumsroot@fbhost:~#pkgpkg:notenoughargumentsUsage:pkg[-v][-d][-l][-N][-j<jailnameorid>|-c<chro......