linux top命令的用法详细详解 linux释放内存命令

什么是内存内存(Memory)是计算机的重要部件之一,也称内存储器和主存储器,它用于暂时存放CPU中的运算数据,与硬盘等外部存储器交换的数据 。
它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平 。
只要计算机开始运行,操作系统就会把需要运算的数据从内存调到CPU中进行运算,当运算完成,CPU将结果传送出来 。
内存的运行也决定计算机整体运行快慢的程度 。
Linux内存回收机制为啥要回收:

  • 内核需要为任何时刻突发到来的内存申请提供足够的内存,以便cache的使用和其他相关内存的使用不至于让系统的剩余内存长期处于很少的状态 。
  • 当真的有大于空闲内存的申请到来的时候,会触发强制内存回收 。
内存回收针对的目标有两种,一种是针对zone的,另一种是针对一个memcg的,把针对zone的内存回收方式分为三种,分别是快速内存回收、直接内存回收、kswapd内存回收 。
查看Linux内存情况查看/proc/meminfobash
[root@test ~]# cat /proc/meminfoMemTotal:16166688 kBMemFree:14051412 kBMemAvailable:14772588 kBBuffers:2116 kBCached:1073260 kBSwapCached:0 kBActive:770384 kBInactive:698264 kBActive(anon):450156 kBInactive(anon):76748 kBActive(file):320228 kBInactive(file):621516 kBUnevictable:0 kBMlocked:0 kBSwapTotal:33554428 kBSwapFree:33554428 kBDirty:476 kBWriteback:0 kBAnonPages:393328 kBMapped:153828 kBShmem:133628 kBSlab:246448 kBSReclaimable:133892 kBSUnreclaim:112556 kBKernelStack:13472 kBPageTables:30496 kBNFS_Unstable:0 kBBounce:0 kBWritebackTmp:0 kBCommitLimit:41637772 kBCommitted_AS:4257776 kBVmallocTotal:34359738367 kBVmallocUsed:320696 kBVmallocChunk:34350426108 kBHardwareCorrupted:0 kBAnonHugePages:155648 kBCmaTotal:0 kBCmaFree:0 kBHugePages_Total:0HugePages_Free:0HugePages_Rsvd:0HugePages_Surp:0Hugepagesize:2048 kBDirectMap4k:279276 kBDirectMap2M:6965248 kBDirectMap1G:11534336 kB使用free命令查看bash
[root@test ~]# free -htotalusedfreesharedbuff/cacheavailableMem:15G874M13G130M1.2G14GSwap:31G0B31G参数说明:
  • total:总内存大小 。
  • used:已经使用的内存大小(这里面包含cached和buffers和shared部分) 。
  • free:空闲的内存大小 。
  • shared:进程间共享内存(一般不会用,可以忽略) 。
  • buffers:内存中写完的东西缓存起来,这样快速响应请求,后面数据再定期刷到磁盘上 。
  • cached:内存中读完缓存起来内容占的大小(这部分是为了下次查询时快速返回) 。
  • available:还可以被应用程序使用的物理内存大小,和free的区别是,free是真正未被使用的内存,available是包括buffers、cached的 。
  • Swap:硬盘上交换分区的使用大小 。
Buffer和CacheCache(缓存),为了调高CPU和内存之间数据交换而设计,Buffer(缓冲)为了提高内存和硬盘(或其他I/O设备的数据交换而设计) 。
Cache主要是针对读操作设计的,不过Cache概念可能容易混淆,我理解为CPU本身就有Cache,包括一级缓存、二级缓存、三级缓存,我们知道CPU所有的指令操作对接的都是内存,而CPU的处理能力远高于内存速度,所以为了不让CPU资源闲置,Intel等公司在CPU内部集成了一些Cache,但毕竟不能放太多电路在里面,所以这部分Cache并不是很大,主要是用来存放一些常用的指令和常用数据,真正大部分Cache的数据应该是占用内存的空间来缓存请求过的数据,即上面的Cached部分(这部分纯属个人理解,正确与否有待考证) 。
【linux top命令的用法详细详解 linux释放内存命令】Buffer主要是针对写操作设计的,更细的说是针对内存和硬盘之间的写操作来设计的,目的是将写的操作集中起来进行,减少磁盘碎片和硬盘反复寻址过程,提高性能 。

推荐阅读