如何查看Linux系统内存使用情况
可以使用free、top、vmstat、sar、/proc/meminfo等查看内存的使用情况。
1、使用free查看整体内存使用情况,如下: free输出如上图,其中的数值都默认以字节为单位。输出为两行六列,两行分别是物理内存 Mem 和交换分区 Swap 的使用情况,而六列中,每列数据的含义分别为:
- 第一列,total 是总内存大小;
- 第二列,used 是已使用内存的大小,包含了共享内存;
- 第三列,free 是未使用内存的大小;
- 第四列,shared 是共享内存的大小;
- 第五列,buff/cache 是缓存和缓冲区的大小;
- 第六列,available 是新进程可用内存的大小。
需要注意的是,available的含义,不仅包含未使用内存,还包括了可回收的缓存,所以一般会比未使用内存更大。 2、使用top查看进程的内存使用情况,如下: top 输出界面的顶端,也会显示系统整体的内存使用情况,跟 free 整体内存使用情况类似。进程列表中包含了进程最重要的几个内存使用情况,有VIRT、RES、SHR 以及 %MEM。
- VIRT 是进程虚拟内存的大小,只要是进程申请过的内存,即便还没有真正分配物理内存,也会计算在内。
- RES 是常驻内存的大小,也就是进程实际使用的物理内存大小,但不包括 Swap 和共享内存。
- SHR 是共享内存的大小,比如与其他进程共同使用的共享内存、加载的动态链接库以及程序的代码段等。
- %MEM 是进程使用物理内存占系统总内存的百分比。
需要注意: 一,虚拟内存通常并不会全部分配物理内存。根据上面输出,可以发现每个进程的虚拟内存都比常驻内存大得多。 二,共享内存 SHR 并不一定是共享的,例如,程序的代码段、非共享的动态链接库,也计算在 SHR 里。SHR 也包括了进程间真正共享的内存。 3、使用vmstat、sar查看内存变化趋势。 vmstat显示如下: vmstat 1 表示每隔1秒打印一次输出。 Memory部分每列数据含义如下:
- swpd: 虚拟交换内存的使用大小,如果大于0,表示你的机器物理内存不足了。
- free: 空闲内存。
- buff: 已用缓冲数目。
- cache: 已用缓存数目。
sar命令如下: sar -r 报告内存利用率统计信息,如下: 每列含义如下:
- kbmemfree: 空闲的物理内存大小
- kbmemused: 使用中的物理内存大小
- %memused: 物理内存使用率
- kbbuffers: 内核中作为缓冲区使用的物理内存大小,kbbuffers和kbcached:这两个值就是free命令中的buffer和cache。
- kbcached: 缓存的文件大小
- kbcommit: 保证当前系统正常运行所需要的最小内存,即为了确保内存不溢出而需要的最少内存。
- %commit: commit 这个值是kbcommit与内存总量的一个百分比的值。
- kbactive: 活动内存大小(最近使用过的内存,除非绝对必要,否则通常不会回收)。
- kbinact: 非活动内存大小(最近使用较少的内存,更容易回收用于其他目的)。
- kbdirty: 等待写入磁盘的内存量(以KB为单位)。
- kbmemused:这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间.(实测发现free中的used才不包括buffer和cache空间)
- %memused:这个值是kbmemused和内存总量(不包括swap)的一个百分比.
- kbbuffers和kbcached:这两个值就是free命令中的buffer和cache.
- kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap).
- %commit:这个值是kbcommit与内存总量(包括swap)的一个百分比.
使用vmstat跟sar可以观察内存在一段时间内变化趋势,以此来判断是哪部分内存被使用。 4、查看/proc/meminfo文件。 /proc 是 Linux 内核提供的一种特殊文件系统,是用户跟内核交互的接口。/proc/meminfo是”free”、”vmstat”等性能监控工具的数据源。 /proc/meminfo如下: /proc/meminfo文件信息较多,您可参考man手册(man proc)查看各项指标。 如果您有其他问题,欢迎您联系火山引擎技术支持服务