free命令概述
free
命令是在 Linux 系统中用于显示系统的总体内存使用情况。本篇对该命令的一些常用语法进行简要说明。若想查看更多该命令的用法,可通过man free
查看。
free命令语法
-k
:以千字节(KB)为单位显示内存使用情况(默认)。-b(字节)
、-m(MB)
、-g(GB)
同理
-h
:以合适的单位显示内存使用情况
[root@VM-8-15-centos ~]# free -h
total used free shared buff/cache available
Mem: 2.0G 973M 77M 592K 947M 854M
Swap: 0B 0B 0B
-s N
:每隔 N 秒刷新一次内存信息,N 填数字,可结合其他参数使用,但要写在 -s 前面
free命令扩展
1、free
命令各字段解析
[root@VM-8-15-centos ~]# free -h
total used free shared buff/cache available
Mem: 2.0G 973M 77M 592K 947M 854M
Swap: 0B 0B 0B
- total:总内存大小
- used:已使用的内存大小
- free:未使用的内存大小
- shared:多个进程共享的内存大小
- buff/cache:被缓冲和缓存使用的内存大小,buffer,缓冲区;cache,缓存区
- available:估算的可用于启动新应用程序的,未被使用的内存大小(不包括缓冲/缓存)
缓冲区与缓存区:
- buffer(缓冲区)是指写入数据时,把分散的写入操作保存到内存中,达到一定程度集中写入硬盘,减少硬盘碎片以及反复的寻通时间。buffer解决的是空间问题,给数据写入提供一个暂存空间
- cache(缓存区)是指把读取磁盘而来的数据保存在内存中,再次读取,下一次不用读取硬盘,而是直接从内存中读取,加速数据读取过程。cache解决的是时间问题,提高数据读取速度;cache利用的是内存极快的速度特性,读写速度是磁盘的很多倍
2、清理缓存
Linux系统会将一部分内存用作缓存,以加快文件系统的读写速度。当系统内存不足时,可以通过清理缓存来释放内存。就是清理 buff/cache 中的内存
[root@VM-8-15-centos ~]# free -h
total used free shared buff/cache available
Mem: 2.0G 979M 715M 592K 303M 867M
Swap: 0B 0B 0B
[root@VM-8-15-centos ~]# echo 1 > /proc/sys/vm/drop_caches
[root@VM-8-15-centos ~]# free -h
total used free shared buff/cache available
Mem: 2.0G 981M 843M 592K 174M 865M
Swap: 0B 0B 0B
上述命令的意思是将 1 写入到 drop_caches 中去,其中还可以写入2,3,各模式意义如下:
1
:清理页缓存,页缓存用于存储最近访问过的文件内容,以加快对相同文件的后续访问速度。清理页缓存可能会导致后续的文件访问变慢,因为内容需要从磁盘重新读取。
2
:理目录项缓存和 inode 缓存,目录项缓存用于存储目录项信息,而 inode 缓存用于存储文件的元数据。清理这些缓存可能会导致文件系统操作变慢,因为相关信息需要从磁盘重新读取。
3
:清理页缓存、目录项缓存和 inode 缓存,这通常用于最大程度地释放内存,但同样会导致后续的磁盘访问和文件系统操作变慢。
注意:drop_caches 的使用应该谨慎,因为它可能会导致系统性能下降。在大多数情况下,Linux 内核会自动管理这些缓存,以优化系统性能。只有在特定的测试和调试场景下,才应该考虑使用 drop_caches。
3、当内存不足时,可通过以下命令查看进程占用内存的情况,停止不必要的进程释放内存
# 看出进程占用内存最高的前十项
# 第一列:进程号 第二列:内存占用
[root@VM-8-15-centos home]# ps -e -o 'pid,rsz' | sort -nrk 2 | head -10
6688 766896
18333 47820
379 47272
1481 42736
1408 28968
1125 23308
1107 17764
18408 15016
2358 14764
18528 11276