Linux free 命令详解

             total       used       free     shared    buffers     cachedMem:      20549148   20435012     114136          0     616232    5695968-/+ buffers/cache:   14122812    6426336Swap:     12289716        132   12289584

习大大说:基础不牢,地动山摇。今天起总结一些码农的基础知识,记录备用。

free 命令结果Mem:物理内存的使用情况统计total:物理内存总量used:总计分配的内存(包含 buffers 与 cache )使用数量,但其中可能部分内存并未实际使用,如程序关闭后遗留的内存占用free:未被分配的内存,并不是当前的真正可用内存shared:共享内存buffers:系统分配的 buffers 数量cached:系统分配的 cache 数量-/+ buffers/cached:物理内存的缓存的使用情况统计used:程序实际使用的内存总量free:系统当前实际可用内存,包括未被分配的内存以及未被使用的 buffers 与 cache 之和Swap:磁盘交换分区(虚拟内存)的使用情况统计

buffer 与 cache 的区别,参考:linux memory: buffer vs cache

A buffer is something that has yet to be “written” to disk.A cache is something that has been “read” from the disk and stored for later use.

shared memory 用于不同进程之间共享数据,是进程间通信的一种方法,参考:what is shared memory ?

free 结果公式

首先,总内存,这一点都是一样的。

Mem[total] = Mem[used] + Mem[free]Mem[total] = -/+ buffers/cache[used] + -/+ buffers/cache[free]

Mem[free] 代表未被分配的内存,并不是当前的可用内存。在 Linux 内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快。所以我个人觉得那些安卓机上所谓的清理内存软件是没啥意义的,用的不好反而会使系统更卡,因为当你再次打开已关闭的程序时,又要重新加载所需要的文件。

其次,前两行的关系。

-/+ buffers/cache[used] = Mem[used] - (Mem[buffers] + Mem[cached])-/+ buffers/cache[free] = Mem[free] + (Mem[buffers] + Mem[cached])

free 命令用法

freeusage: free [-b|-k|-m|-g] [-l] [-o] [-t] [-s delay] [-c count] [-V]  -b,-k,-m,-g show output in bytes, KB, MB, or GB  -l show detailed low and high memory statistics  -o use old format (no -/+buffers/cache line)  -t display total for RAM + swap  -s update every [delay] seconds  -c update [count] times  -V display version information and exit

free -t

             total       used       free     shared    buffers     cachedMem:      20549148   20412872     136276          0     628412    5643692-/+ buffers/cache:   14140768    6408380Swap:     12289716        132   12289584Total:    32838864   20413004   12425860

清理优化

free -m   # 清理前内存使用情况echo 1 > /proc/sys/vm/drop_caches   # 开始清理free -m   # 清理后内存使用情况 dmidecode | grep -A16 "Memory Device$"   # 查看内存条数命令
cat /proc/sys/vm/drop_caches       # 查看 drop_caches 默认 0 echo 1 > /proc/sys/vm/drop_caches   # To free pagecacheecho 2 > /proc/sys/vm/drop_caches   # To free dentries and inodesecho 3 > /proc/sys/vm/drop_caches   # To free pagecache, dentries and inodes

更多优化内容参考:Linux内存优化——/proc/sys/vm/优化

问题监测

首先看 free 的第二行中 free 是否过小,如果过小再 top 命令,shift + M 按内存排序,看哪个进程内存耗用多。更多参考:Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决

Linux free 命令详解

相关文章:

你感兴趣的文章:

标签云: