命令:free [参数 ]
命令参数:
-b 以Byte为单位显示内存使用情况。
-k 以KB为单位显示内存使用情况。
-m 以MB为单位显示内存使用情况。
-g 以GB为单位显示内存使用情况。
-o 不显示缓冲区调节列。
-s<间隔秒数> 持续观察内存使用状况。
-t 显示内存总和列。
-V 显示版本信息。
结果说明:
还有一个free -h命令,输出的结果会有好很多(目前的理解是根据内存大小搭配合适的单位):
mem:表示物理内存统计
swap:表示硬盘上交换分区的使用情况
当Linux的物理内存快要被耗尽时,系统会把一些进程占用的内存转移到 swap 区,当物理内存被释放一部分时,swap 区的一些内存占用又慢慢回到 mem 区,但是 mem 区却不再是之前的满负荷状态,而是有一部分 free 的内存!
total:总计物理内存的大小。
used:已使用的空间。
free:可用的空间。
Shared:多个进程共享的内存总额。
buff/cache:磁盘缓存的大小。
buff/cache:表示物理内存的缓存统计
buff/cache主要干啥来的?
Linux具有先进的缓存机制,这里的buffer指Linux内存的:Buffer cache。这里的cache指Linux内存中的:Page cache。翻译成中文可以叫做缓冲区缓存和页面缓存。Buffer cache主要是设计用来在系统对块设备进行读写的时候,对块进行数据缓存的系统来使用。Page cache主要用来作为文件系统上的文件数据的缓存来用,尤其是针对当进程对文件有read/write操作的时候。事实上page cache也负责了大部分的块设备文件的缓存工作。但是在进行了大量文件操作之后,缓存会把内存资源基本用完,虽然文件读取效率提高了,但是物理内存会被逐渐用完。
原来是因为系统进行了频繁的文件读写操作,但是为什么操作系统不会主动回收呢,原来是因为drop_caches 的默认参数设置的就是不释放。
drop_caches 的值可以是 0-3 之间的数字,代表不同的含义:
0:不释放(系统默认值)
1:释放页缓存
2:释放dentries和inode
3:释放所有缓存
修改:# echo 1 > /proc/sys/vm/drop_caches
Linux内核会在内存将要耗尽的时候,触发内存回收的工作,以便释放出内存给急需内存的进程使用。一般情况下,这个操作中主要的内存释放都来自于对buffer/cache的释放。尤其是被使用更多的cache空间。既然它主要用来做缓存,只是在内存够用的时候加快进程对文件的读写速度,那么在内存压力较大的情况下,当然有必要清空释放cache,作为free空间分给相关进程使用。
available:真正剩余的可被程序应用的内存数
看起来,free和available表达的是同一个意思,都是可用的空间,他们什么区别呢?
free 是真正尚未被使用的物理内存数量。
available 是应用程序认为可用内存数量,Linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的 buffer 和 cache。所以对于内核来说,buffer 和 cache 都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。从应用程序的角度来说,available = free + buffer + cache。请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差。
总结:
1)当物理内存快被耗尽时,系统并没有崩溃,而是拿 swap 做临时内存,当两者都耗尽,系统 OutofMemory
2)物理内存达到峰值,系统中一些不常用的进程内存占用被提到 swap 区
3)当 Men 区的资源进行释放时,被挪到 swap 的内存并不会全部回来,随着系统或者程序的唤醒才会慢慢回到 men 区
4)swap 是内存不够时,磁盘虚拟出来的内存,磁盘主要是 I/O 级别的操作,并不是系统内核级别的操作,处理速度跟 mem 区不是一个等级
除了free命令以外,还有很方式也可以查看资源使用情况
1.命令:
$cat /proc/meminfo
MemTotal: 1882308 kB
MemFree: 660832 kB
MemAvailable: 1256708 kB
Buffers: 0 kB
Cached: 736252 kB
SwapCached: 4 kB
Active: 679104 kB
Inactive: 394796 kB
Active(anon): 281284 kB
Inactive(anon): 86380 kB
Active(file): 397820 kB
Inactive(file): 308416 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 1679356 kB
SwapFree: 1675508 kB
Dirty: 8 kB
Writeback: 0 kB
AnonPages: 337696 kB
Mapped: 2702