优化命令之vmstat——监控虚拟内存、进程、cpu

本文介绍了Linux下的vmstat命令,用于监控虚拟内存、进程和CPU活动。内容涵盖vmstat概述,包括物理内存和虚拟内存的原理,详细讲解了vmstat命令的格式和参数,并通过多个案例展示如何查看虚拟内存使用、磁盘读写等信息,以及如何在压力测试中观察内存变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一:vmstat概述

1.1物理内存和虚拟内存

1.2虚拟内存原理

二:vmstat命令

2.1vmstat格式

2.2vmstat参数

三:案例

3.1显示虚拟内存使用情况

3.2一秒内显示2次虚拟内存使用情况

3.3以指定的MB 单位输出结果

3.4显示活跃和非活跃内存

3.5查看系统已经fork了多少次

3.6查看内存使用的详细信息

3.7以指定的 MB 单位输出各事件计数器和内存的统计信息

3.8查看磁盘的读/写

 四:进行压力测试,观察虚拟内存的变化

 

一:vmstat概述

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。vmstat 工具提供了一种低开销的系统性能观察方式。因为 vmstat 本身就是低开销工具,在非常高负荷的服务器上,需要查看并监控系统的健康情况,在控制窗口还是能够使用vmstat 输出结果

1.1物理内存和虚拟内存

物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)

作为物理内存的扩展,linux会在物理内存不足时,使用交换分区的虚拟内存,更详细的说,就是内核会将暂时不用的内存块信息写到交换空间,这样以来,物理内存得到了释放,这块内存就可以用于其它目的,当需要用到原始的内容时,这些信息会被重新从交换空间读入物理内存。
linux的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存

1.2虚拟内存原理

在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。

二:vmstat命令

2.1vmstat格式

vmstat [-a] [-n] [-S unit] [delay [count]]
vmstat [-s] [-n] [-S unit]
vmstat [-m] [-n] [delay [count]]
vmstat [-d] [-n] [delay [count]]
vmstat [-p disk partition] [-n] [delay [count]]
vmstat [-f]
vmstat [-V]

命令功能:用来显示虚拟内存的信息

2.2vmstat参数

-a:显示活跃和非活跃内存(活跃内存是指当前进程使用的内存,不活跃的内存是已经被分配了,但暂时还没有使用的内存)

-f:显示从系统启动至今的fork数量

-m:显示slabinfo

-n:只在开始时显示一次各字段名称

-s:显示内存相关统计信息及多种系统活动数量

delay:刷新时间间隔。如果不指定,只显示一条结果

count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷

-d:显示磁盘相关统计信息

-p:显示指定磁盘分区统计信息

-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)

-V:显示vmstat版本信息

三:案例

3.1显示虚拟内存使用情况

vmstat

字段说明:

procs进程
r运行队列中进程数量
b等待I/O的进程数量
memory内存
swpd使用虚拟内存大小
free可用内存大小
buff用作缓存的内存大小
cache用作缓存的内存大小
swap交换区
si每秒从交换区写到内存的大小
so每秒写入交换区的内存大小
IO现在的linux版本块的大小为1024bytes
bi每秒读取的块数
bo每秒写入的块数
system系统信息

in

每秒中断数,包括时钟中断

cs

每秒上下文切换数

CPU

以百分比表示

us

用户进程执行时间(user time)

sy

系统进程执行时间(system time)

id

空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示

wa

等待IO时间

空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率

备注: 如果 r经常大于 4,且id经常少于40,表示cpu的负荷很重。如果pi,po 长期不等于0,表示内存不足。如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。Linux在具有高稳定性、可靠性的同时,具有很好的可伸缩性和扩展性,能够针对不同的应用和硬件环境调整,优化出满足当前应用需要的最佳性能。因此企业在维护Linux系统、进行系统调优时,了解系统性能分析工具是至关重要的

(1)如果在processes中运行的序列(process r)是连续的大于在系统中的CPU的个数表示系统现在运行比较慢,有多数的进程等待CPU。

(2)如果r的输出数大于系统中可用CPU个数的4倍的话,则系统面临着CPU短缺的问题,或者是CPU的速率过低,系统中有多数的进程在等待CPU,造成系统中进程运行过慢。

(3)如果空闲时间(cpu id)持续为0并且系统时间(cpu sy)是用户时间的两倍(cpu us)系统则面临着CPU资源的短缺。

当发生以上问题的时候请先调整应用程序对CPU的占用情况.使得应用程序能够更有效的使用CPU.同时可以考虑增加更多的CPU. 关于CPU的使用情况还可以结合mpstat, ps aux top prstat –a等等一些相应的命令来综合考虑关于具体的CPU的使用情况,和那些进程在占用大量的CPU时间.一般情况下,应用程序的问题会比较大一些.比如一些sql语句不合理等等都会造成这样的现象

3.2一秒内显示2次虚拟内存使用情况

vmstat 1 2
#在1秒时间内进行2次采样

3.3以指定的MB 单位输出结果

vmstat -S M 1 2

3.4显示活跃和非活跃内存

vmstat -a 2 5
#-a:显示活跃和非活跃内存;在2秒内进行5次采样

说明:
使用-a选项显示活跃和非活跃内存时,所显示的内容除增加inact和active外,其他显示内容与例子1相同

字段说明:

memory

内存

inact

非活跃内存大小(当使用-a选项时显示)

active

活跃的内存大小(当使用-a选项时显示)

3.5查看系统已经fork了多少次

在linux中fork函数是非常重要的函数,它的作用是从已经存在的进程中创建一个子进程,而原进程称为父进程

vmstat -f

说明:这个数据是从/proc/stat中的processes字段里取得

3.6查看内存使用的详细信息

vmstat -s

说明:这些信息的分别来自于/proc/meminfo、/proc/stat和/proc/vmstat 

3.7以指定的 MB 单位输出各事件计数器和内存的统计信息

vmstat -s -S M

3.8查看磁盘的读/写

vmstat -d

说明:这些信息主要来自于/proc/diskstats

merged:表示一次来自于合并的写/读请求,一般系统会把多个连接/邻近的读/写请求合并到一起来操作

tota

成功读取的总数

merged

分组读取(产生一个 IO)

sectors

成功读取的扇区数

ms

读取花费的毫秒

 total

成功写入的总数

merged

分组写入(产生一个 IO)

sectors

成功写入的扇区数

ms

写花费的毫秒

IO

cur

正在进行的IO

sec

IO花费的秒数

 四:进行压力测试,观察虚拟内存的变化

使用dd命令持续写入的时候,我们使用vmstat命令查看内存的使用情况(在此之前可以调低运行内存,达到实验的效果)

dd if=/dev/zero of=/1.txt bs=1G count=20

vmstat 1(每1秒执行一次,需要手动中断)

物理内存不足时:

1、开始使用swpd,swpd不为0
2、si so大于0开始从硬盘中读取

表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。(大于0,关注内存泄漏,结合si和so看,如果si和so为0,也没关系)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值