linux 性能分析之内存分析(free,vmstat,top,ps,pmap等工具使用介绍)

引言

学生时代经常听到老师和同学说到学习 linux 的重要性。但是当时看到这个命令行界面就头疼,也就草草地应付学了一下,哎嘛,还是游戏香!

但是当前两天自己捣鼓服务器的时候,发现自己部署的一个服务总是崩溃,最终发现是服务器的内存不够了。

现在要查询问题原因又头疼了!害,只怪之前没有好好学习实践,该头疼还是会头疼,只不过是早晚的事儿。(咳咳,也奉劝后来者,若想要在从事相关领域,基础知识还是打打牢,内功心法多学一点总没错)。

今天这篇文章简单介绍一下 linux 系统中如何对内存进行分析。

常见的内存分析工具介绍

/proc/meminfo

cat /proc/meminfo

linux 性能分析之内存分析(free,vmstat,top,ps,pmap等工具使用介绍)_第1张图片

单词 解释
MemTotal 系统总内存,通常会比硬件内存要小一些,是由于 BIOS、内核等也会占用一定的内存。
MemFree 系统空闲内存, 物理内存剩余。
MemAvailable 应用程序可用内存,和 MemFree 的区别在于:MemFree 就是内存条剩余的空间,是系统层面的。而 MemAvailable 则是应用程序层面的,系统中有些内存虽然被使用了,但是有一部分是可以回收的,如:BuffersCached 等,当应用程序需要使用内存时,系统会主动释放这部分内存。
Buffers 缓冲区内存
Cached 缓存

free

free -h

free

单词 解释
Mem 行(第二行)内存的使用情况
Swap 行(第三行)交换空间的使用情况。可以将其想象成 windows 的虚拟内存,当内存不足时,把一部分硬盘空间虚拟成内存使用。
total 总可用物理内存。
used 已使用的物理内存和交换空间。
free 系统尚未使用的物理内存。
shared 共享内存空间。
buff/cache 列显示被 buffercache 使用的物理内存大小,这部分内存是当应用程序需要使用时系统可以主动释放的,通常将系统中经常使用的文件、块设备文件进行缓存。
available 应用程序可用内存。
MemTotal = used + free + buff/cache

vmstat

vmstat 2 3 第一个参数代表隔几秒执行一次,第二个参数是执行多少次退出。若不给第二个参数,则会持续输出内容,需要 Ctrl+C 来退出。

在这里插入图片描述

单词 解释
r Procs(进程),等待执行的任务数,即有多少进程在等待 cpu 执行任务,可用于分析 cpu,一般这个值不会大于 cpu 的个数,如果超过了,会出现 cpu 瓶颈
b 有多少进程在等待 io
swpd 正在使用虚拟内存的大小,单位 k
free 空闲内存的大小
buff 已用的 buff 大小,对块设备的读写进行缓冲
cache 已用的 cache 大小,文件系统的 cache
si 每秒从交换区写入内存的大小(单位:kb/s)
so 每秒从内存写到交换区的大小
bi io 分析,每秒读取的块数(读磁盘)
bo io 分析,每秒写入的块数(写磁盘)
in 每秒中断数,包括时钟中断(越小越好)
cs 每秒上下文切换数(越小越好),值太大需要考虑降低进程或线程数目
us 用户进程执行消耗 cpu 时间(user time),若是长期使用超过 50%,则需要考虑优化算法或者实施其他措施
sy 系统进程消耗 cpu 时间(system time),该值过高,需要检查是什么导致的内核消耗的 cpu 资源多,需要优化。通常情况 us + sy 的参考值为
id 空闲时间(包括 io 等待时间),一般来说 us+sy+id=100
wa 等待 io 时间,wa 过高时,说明 io 等待比较严重,这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈。

top

top 可以看到进程 PID,若发现失控的进程,可以找到对应的进程进行故障排除(kill)。

命令行交互,实时刷新展示数据,q 退出。

linux 性能分析之内存分析(free,vmstat,top,ps,pmap等工具使用介绍)_第2张图片

基于上面所讲述的,基本上都能看懂含义,下面的几个没见过的列一下。

单词 解释
VIRT virtual memory usage 虚拟内存占用大小
RES resident memory usage 实际内存占用
SHR shared memory 共享内存占用

ps

ps aux --sort=rssrss 正序排序。

linux 性能分析之内存分析(free,vmstat,top,ps,pmap等工具使用介绍)_第3张图片

top 差不多,就不详细解释了。

单词 解释
%MEM 进程占用物理内存的百分比
VSZ 使用的虚拟内存大小
RSS 进程使用物理内存大小,重点关注这个值

pmap

pmap -x pid 用于查看进程的内存映像信息,看哪些地方用了多少内存。

linux 性能分析之内存分析(free,vmstat,top,ps,pmap等工具使用介绍)_第4张图片
linux 性能分析之内存分析(free,vmstat,top,ps,pmap等工具使用介绍)_第5张图片

单词 解释
Address 占用内存的文件的内存起始地址
Kbytes 占用内存的字节数
RSS 实际占用内存大小
Dirty 脏页大小
Mapping 占用内存的文件,[anon] 为已分配的内存,[stack] 为程序堆栈

最后的 total 为统计的总值。通常当想看这个程序的内存消耗情况,可以只看最后一行,如下:

while true; do pmap -x pid | tail -1; sleep 1; done

在这里插入图片描述

总结

上述工具都是 linux 自带的,当然也有很多更高级的工具。实际工作中,挑自己用的顺手的用就行了,基本上用顺手了都能够定位问题。我一般的使用:

  • 只查看系统的内存使用情况:free -h ,很直观。
  • 分析进程内存占用: top/ps 都不错。
  • 深入分析: pmap

当然了,也可以在服务器安装运维管理面板,目前开源的项目也很多,直接通过图形化界面来查看更加方便。

所有的工具都是为了解决问题而使用的,不要为了使用工具而使用工具,本篇记录一下常用工具,也方便之后自己进行回顾,可以先大概了解工具都能做什么,真正需要用到的时候再详细去了解使用即可。

参考

  • linux内存管理(详解)
  • 一文掌握 Linux 性能分析之内存篇
  • Linux内存占用分析的几个方法,你知道几个?
  • 超全整理!Linux 性能分析工具汇总
  • Linux内存机制 Swap机制以及如何手动释放swap和内存

你可能感兴趣的:(linux,linux,运维,服务器)