百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

free -m中的cache是什么?为什么会占用那么高

cac55 2024-09-21 13:31 41 浏览 0 评论

环境

  • 红帽企业 Linux(所有版本)
  • JBoss 企业应用程序平台 (EAP) - 所有版本

Issue

  • 什么是cachefree -m输出以及为什么内存利用率高cache?
  • 如何通过分析 Heap 创建新的 JBoss 服务器实例所需的内存容量freeJBoss 中的命令输出,如果已经有一个 JBoss 实例在运行?
  • 为什么缓存使用了大量内存?
  • 缓存中经常充分利用物理内存

解决

"free -m" 命令的输出结果中的 Cache 是什么?

它表示当前被 Page chche 占用的内存容量,即 RAM 容量。Page cache 是被放到 RAM 上的曾经读或写操作所用到的文件或实际数据的副本。

拥有缓存机制有什么好处?当执行读或者写操作的时候,内核首先将所要的数据放到 RAM。

读取操作: 去磁盘找到数据 --> 把数据从磁盘存到 RAM --> 执行读操作

写操作: - 去磁盘找到数据 --> 把数据从磁盘存到 RAM --> 执行写操作 --> 把修改的数据复制到磁盘

  • 不论是访问外部存储还是本地存储,总是慢于直接访问 RAM,因为磁盘读取速度慢于 RAM 的读取速度。如果某文件持续地被读取或者修改,访问磁盘是一种资源消耗。在 Cache 的帮助下,文件会在 RAM 保存一段时间,这样就不用每次都去磁盘读或者修改数据。经过一段时间后,Cache 上的数据会被同步到磁盘。
  • 把文件存到 RAM 里大大提高了处理速度,因为与从本地磁盘访问文件相比,它减少了大量的文件访问时间。这也间接地提高了计算机的整体性能。

下面的示例演示了缓存如何提高整体性能:

[root@sourcedb ~]# cat >aaa   #写入文件aaa
adfa
adfa
adfa
^C
[root@sourcedb ~]# 
[root@sourcedb ~]# cat aaa  #查看内容
adfa
adfa
adfa
[root@sourcedb ~]# sync
[root@sourcedb ~]# echo 3 > /proc/sys/vm/drop_caches   #清空cache
如果您系统的 IO 操作频繁,我们不建议您使用这条命令。请不要在生产环境中使用以下命令。
[root@sourcedb ~]# time cat aaa
adfa
adfa
adfa

real	0m0.018s      #实际为0.018s
user	0m0.000s
sys	0m0.006s
[root@sourcedb ~]# time cat aaa 
adfa
adfa
adfa

real	0m0.001s   #实际为0.001s   从缓存中读取速度明显大于0.018
user	0m0.000s
sys	0m0.001s
因此,只要有空闲内存,内核将始终尝试利用它来将所需文件保存为缓存。

如果没有可用 RAM 并且新进程需要可用 RAM,会发生什么情况? 当一个新的进程需要 RAM 的空页时,内核会检查 cache 是否有空页,并且把 cache 里的文件同步到本地磁盘,从而收回空页,释放 RAM 给新的进程

有关“free -m”命令输出的详细说明:-

# free -m
             total       used       free     shared    buffers     cached
Mem:          3753       3455        298          0        144        664
-/+ buffers/cache:       2645       1107 <<--  Actual Free RAM
Swap:         4095         75       4020
  • 上述实例中,RAM 内存总量为 3753 MB。其中 3455 MB 被占用,298 MB 为剩余容量。
  • 在 "free -m" 输出结果中,cache 和 buffers 也被算作实际占用的 RAM 容量,但这并不符合事实。
  • 在被占用的 3455 MB 内存中,一部分被用作 cache 或 buffer。如上所述,当没有空余的 RAM 容量分配给新进程时,就可以回收 cache 和 buffer 的内存。所以我们可以把 "Cache" 和 "buffer" 看作空余 RAM。因此可以根据以下公式计算实际剩余 RAM 的容量。
  • Actual Free RAM = "free" + "buffers" + "cached" = 298 + 144 + 664 = 1106 在 "free -m" 命令输出的第二行的 "free" 值约为 1107。

为什么 cache 要占用那么多的内存?

  • 对于一个 Linux 虚拟内存管理器来说这是正常现象。为了理解为什么在正常情况下cache内存那么高,您必须先了解linux是如何处理 I/O的。当某用户读或者写文件时,它实际上是修改主内存的副本。内核会在磁盘里创建一个副本,必要时会对其修改。被这些副本所占用的内存就叫做 cached memory。
  • 当用户进程发起读或者写操作时,就会消耗 cache 内存。内核会查找用户正在操作的文件副本,如果没有的话,它会在 cache 里分配出一个新的页面,并且从磁盘里读出相应的数据填充它。如果用户只是读这个文件,这一页会被标注成 "clean" cache 页。然而,只要用户写该文件,这一页会被标注成 "dirty"。出现在 ps 里被称做 pdflush 的内核线程会定期被唤醒,并将所有标记为 dirty 的页面复制到磁盘,然后把它们标记为 clean。注意该页面只能被重新标记为 clean,由于之后可能会对该文件做进一步的 IO 操作,该页面被重新写回时并不会被释放。
  • 当内核需要内存时,cache 页才会被释放。我们没有必要把 cache 页转换成空页,因为从磁盘读取 cache 页可以加快 IO 速率,而且释放一个 cache 页和分配一个空页一样简单,此外一个空页对于系统执行也没有任何作用。如果 cache 页占满了内存,当下一次内核需要内存时,它会简单地逐出最近最少使用的 clean 页并重新利用它们。

相关推荐

Mac电脑强制删除任何软件方法-含自启动应用

对于打工者来说,进入企业上班使用的电脑大概率是会被监控起来,比如各种流行的数据防泄漏DLP,奇安信天擎,甚至360安全卫士,这些安全软件你想卸载是非常困难的,甚至卸载后它自己又安装回来了,并且还在你不...

Linux基础知识 | 文件与目录大全讲解

1.linux文件权限与目录配置1.文件属性Linux一般将文件可存取的身份分为三个类别,分别是owner/group/others,且三种身份各read/write/execute等权限文...

文件保护不妥协:2025 年 10 款顶级加密工具推荐

数据安全无小事,2025年这10款加密工具凭借独特功能脱颖而出,从个人到企业场景全覆盖,第一款为Ping32,其余为国外英文软件。1.Ping32企业级加密核心工具,支持200+文件格...

省心省力 一个软件搞定系统维护_省心安装在哪里能找到

◆系统类似于我们居住的房间,需要经常打理才能保持清洁、高效。虽然它本身也自带一些清理和优化的工具,但借助于好用的第三方工具来执行这方面的任务,会更让人省心省力。下面笔者就为大家介绍一款集多项功能于一身...

JAVA程序员常用的几个工具类_java程序员一般用什么软件写程序

好的工具做起事来常常事半功倍,下面介绍几个开发中常用到的工具类,收藏一下,也许后面真的会用到。字符串处理:org.apache.commons.lang.StringUtilsisBlank(Char...

手工解决Windows10的若干难题_windows10系统卡顿怎么解决

【电脑报在线】很多朋友已经开始使用Win10,估计还只是测试版本的原因,使用过程中难免会出现一些问题,这里介绍解决一些解决难题的技巧。技巧1:让ProjectSpartan“重归正途”从10074...

System32文件夹千万不能删除,看完这篇你就知道为什么了

C:\Windows\System32目录是Windows操作系统的关键部分,重要的系统文件存储在该目录中。网上的一些恶作剧者可能会告诉你删除它,但你不应该尝试去操作,如果你尝试的话,我们会告诉你会发...

Windows.old 文件夹:系统备份的解析与安全删除指南

Windows.old是Windows系统升级(如Win10升Win11)或重装时,系统自动在C盘创建的备份文件夹,其核心作用是保留旧系统的文件、程序与配置,为“回退旧系统”提供保...

遇到疑难杂症?Windows 10回收站问题巧解决

回收站是Windows10的一个重要组件。然而,我们在使用过程中,可能会遇到一些问题。例如,不论回收站里有没有文件,都显示同一个图标,让人无法判别回收站的空和满的真实情况;没有了像Windows7...

卸载软件怎么彻底删掉?简单几个步骤彻底卸载,电脑小白看过来

日常工作学习生活中,我们需要在安装一些软件程序,但随着软件的更新迭代速度,很多时候我们需要重新下载安装新的程序,这时就需要将旧的一些软件程序进行卸载。但是卸载软件虽然很简单,但是很多小伙伴们表示卸载不...

用不上就删!如何完全卸载OneDrive?

作为Windows10自带的云盘,OneDrive为资料的自动备份和同步提供了方便。然而,从隐私或其他方面考虑,有些人不愿意使用OneDrive。但Windows10本身不提供直接卸载OneDri...

【Linux知识】Linux下快速删除大量文件/文件夹方法

在Linux下,如果需要快速删除大量文件或文件夹,可以使用如下方法:使用rm命令删除文件:可以使用rm命令删除文件,例如:rm-rf/path/to/directory/*这个命令会递...

清理系统不用第三方工具_清理系统垃圾用什么软件

清理优化系统一定要借助于优化工具吗?其实,手动优化系统也没有那么神秘,掌握了方法和技巧,系统清理也是一件简单和随心的事。一方面要为每一个可能产生累赘的文件找到清理的方法,另一方面要寻找能够提高工作效率...

系统小技巧:软件卸载不了?这里办法多

在正常情况下,我们都是通过软件程序组中的卸载图标,或利用控制面板中的“程序和功能”模块来卸载软件的。但有时,我们也会发现利用卸载图标无法卸载软件或者卸载图标干脆丢失找不到了,甚至控制面板中卸载软件的功...

麒麟系统无法删除文件夹_麒麟系统删除文件权限不够

删除文件夹方法例:sudorm-rf文件夹名称。删除文件方法例:sudorm-r文件名包括扩展名。如果没有权限,给文件夹加一下权限再删。加最高权限chmod775文件名加可执行权限...

取消回复欢迎 发表评论: