一文解释Linux 的内存、Swap、Cache、Buffer

通过free命令查看linux内存的使用情况

一文解释Linux 的内存、Swap、Cache、Buffer

total:系统总内存大小。 used:已使用的内存大小(包括cachedbuffers以及shared部分)。 free:空闲的内存大小。 shared:进程间共享的内存(通常可以忽略)。 buffers:用于缓存已写入内容的内存大小,以便快速响应请求,后续数据会定期刷新到磁盘。 cached:用于缓存已读取内容的内存大小,以便下次查询时快速返回。 -/+ buffers/cache分为两部分: - buffers/cache:实际正在使用的内存大小(不包括bufferscached部分,因为这些部分可以被释放),其值为used - buffers - cached+ buffers/cache:可用的内存大小(不仅仅是free部分),其值为free + buffers + cachedSwap:硬盘上的交换分区使用情况。当+buffers/cache表示的可用内存用完时,新请求会将内存中的部分数据写入磁盘,从而将磁盘空间用作虚拟内存。

Buffer和Cache介绍

一文解释Linux 的内存、Swap、Cache、Buffer

Cache(缓存)主要是为提高CPU和内存之间的数据交换速度而设计的。Buffer缓冲)是为了提高内存和硬盘(或其他I/O设备)之间的数据交换速度而设计的。

Cache主要针对操作设计。CPU内部有一级、二级、三级缓存,用于存储常用指令和数据。由于CPU处理速度远高于内存速度,缓存可以防止CPU资源闲置。大部分缓存数据占用的是内存空间,即上文提到的Cached部分。

Buffer主要针对操作设计,具体来说是针对内存和硬盘之间的写操作。它将写操作集中起来进行,减少磁盘碎片和硬盘的反复寻址过程,从而提高性能。Linux系统中有一个守护进程会定期清空Buffer中的内容,将其写入硬盘。手动执行sync命令也会触发此操作。

常见症状

症状一:在Linux中频繁存取文件,物理内存很快用光,而cached一直在增长。

解释:Linux会将每次请求过的数据缓存起来,CPU处理速度远高于内存速度,因此可以从缓存中快速命中结果返回。

症状二:Swap被占用。

腾讯云AI代码助手 腾讯云AI代码助手

基于混元代码大模型的AI辅助编码工具

腾讯云AI代码助手 205 查看详情 腾讯云AI代码助手

解释:内存可能不够用了,才会占用Swap。因此,Swap的使用情况可以作为服务器监控的一项指标。

手动清理Swap和buffers/cache

清理Swap:

swapoff -a && swapon -a

操作说明:如果已经使用了Swap,且当前清空后+buffers/cache还有空间,执行swapoff -a操作时,会将Swap中的内容交换到内存中,数据不会丢失。

清理buffers/cache:

sync; sync; sync; && echo 3 > /proc/sys/vm/drop_caches
sleep 2
echo 0 > /proc/sys/vm/drop_caches

操作说明:

sync:将缓存的内容写入硬盘。 echo 3 > /proc/sys/vm/drop_caches:将drop_caches的值改为3,系统会清理缓存内容,默认值为0。 sleep 2:等待一段时间,防止上一步未执行完毕。 echo 0 > /proc/sys/vm/drop_caches:将drop_caches的值改回默认值。

总结

通过上述分析可知,当空闲物理内存不多时,不一定表示系统运行状态不佳,因为cachebuffer部分可以随时被重用,某种程度上,这两部分内存也可以视为额外的空闲内存。

如果Swap被频繁调用,bibo长时间不为0,才是判断内存资源是否紧张的依据。通过free命令查看资源时,主要关注-/+ buffers/cache的值即可判断内存是否足够。

以上就是一文解释Linux 的内存、Swap、Cache、Buffer的详细内容,更多请关注其它相关文章!

本文转自网络,如有侵权请联系客服删除。