首页 > 系统相关 >Linux vmstat命令基本使用

Linux vmstat命令基本使用

时间:2024-08-15 20:05:13浏览次数:13  
标签:Page 命令 vmstat 内存 Linux 磁盘 CPU 虚拟内存

目录

vmstat命令介绍

vmstat主要是用来检测虚拟内存的,可以展现给定时间间隔的服务器的状态值,包括CPU使用率,内存使用率,虚拟内存交换情况,I/O读写情况等。一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:

# 2表示每隔两秒采集一次服务器状态,1表示只采集一次
# vmstat 2 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 4776548 153688 1299304    0    0     0    15    0    0  2  0 98  0  0

在实际应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,例如:

vmstat 2  
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 4777576 153688 1299500    0    0     0    15    0    0  2  0 98  0  0
 0  0      0 4777696 153688 1299500    0    0     0   124  222  289  0  0 100  0  0
 0  0      0 4777664 153688 1299512    0    0     0   520  426  524  0  0 99  0  0
 0  0      0 4779712 153688 1299548    0    0     0   484  462  525  1  1 98  0  0
 0  0      0 4779428 153688 1299548    0    0     0    10  171  267  0  0 100  0  0

上面的命令表示vmstat每2秒采集一次数据,一直采集,直到我结束程序。vmstat命令常用的选项如下:

选项 功能
-a 显示活跃和非活跃内存
-f 显示从系统启动至今的fork数量
-m 显示slabinfo
-s 显示内存相关统计信息及多种系统活动数量
-d 显示磁盘相关的统计信息
-S 使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(Byte),默认单位为K(1024 Bytes)
delay 刷新时间间隔,如果不指定,只显示一条结果
count 刷新次数,如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷
vmstat各个参数的含义
procs

r:运行队列中进程的数量,这些进程都是可运行状态,都在等待CPU的分配
解释:当这个值超过了CPU数目,就会出现CPU瓶颈,如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高
b:被blocked(阻塞)的进程数,正在等待IO

memory

swpd:使用的虚拟内存的大小,单位是KB
解释:如果该值大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器
free:可用的物理内存大小,单位是KB
buff:物理内存用来缓存读写操作的buffer大小,单位是KB
cache:物理内存用来缓存进程地址空间的cache大小,单位是KB

swap

si(换入):每秒从SWAP(交换分区)读入到RAM(swap in)的大小,单位是KB
so(换出):每秒从RAM写出到SWAP(swap out)的大小,单位是KB
解释:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响。有些朋友看到空闲内存(free)很少时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响。

io

bi:每秒从文件系统或SWAP读入到RAM(blocks in)的块数,block(1KB磁盘块)为单位
bo:每秒从RAM写出到文件系统或SWAP(blocks out)的块数,block(1KB磁盘块)为单位
解释:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。

system

in:每秒的中断数
cs:系统每秒进行上下文切换的次数
解释:cs表示每秒上下文切换的次数,例如,当我们调用系统函数,就要进行上下文切换;当进行线程的切换,也要进行上下文切换,这个值越小越好。例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程或线程数就是比较合适的值了。系统调用也是如此,每次调用系统函数,我们的代码就会进入到内核空间(内核态),导致上下文切换,这个过程很耗资源,所以要尽量避免频繁的系统调用。上下文切换次数过多表示你的CPU大部分时间浪费在上下文切换中,导致CPU干正经事的时间少了。

cpu

us:用户空间占用CPU的百分比
解释:us的值比较高时,说明用户进程消耗的CPU时间比较多,但是如果长期超过50%,那么我们就该考虑优化程序算法或者进行加速。
sy:内核空间占用CPU的百分比
解释:sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。
id:CPU空闲的百分比
wa:CPU等待IO的百分比
解释:wa的值高时,说明CPU等待I/O的时间比较多,这可能是大量的磁盘随机访问造成的,也有可能是磁盘出现瓶颈。
st:来自于虚拟机偷取的CPU所占的百分比

vmstat命令使用实例

显示活跃或非活跃内存

# 每秒输出一次信息
vmstat -a 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 4775112 659976 2271076    0    0     0    15    0    0  2  0 98  0  0
 0  0      0 4775112 659976 2271172    0    0     0   656  522  552  1  0 99  0  0
 0  0      0 4775080 659976 2271172    0    0     0     0  220  304  0  0 100  0  0
 0  0      0 4775332 659976 2271172    0    0     0     0  185  281  0  0 100  0  0
 0  0      0 4775364 659976 2271172    0    0     0   120  228  322  0  0 100  0  0

虚拟内存相关知识

在系统中运行的每个进程都需要使用到内存,但并不是所有的进程每时每刻都会使用到内存。当系统运行所需内存超过实际的物理内存时,系统内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分数据存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。而交换是将整个进程,而不是部分页面,全部交换到磁盘上。分页(Page)写入磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。当内核需要一个分页时,但发现此分页不在物理内存中(因为已经被Page-Out了),此时就发生了分页错误(Page Fault)。当系统内核发现可运行内存变少时,就会通过Page-Out来释放一部分物理内存。尽管Page-Out不是经常发生,但是如果Page-Out频繁不断地发生,直到当内核管理分页的时间超过了运行程序的时间时,系统性能会急剧下降。这时的系统已经运行的非常慢或进入暂停状态,这种状态也被称作thrashing(颠簸)。

总结

vmstat是一个服务器监控命令,通过vmstat可以看到CPU和内存的使用情况。目前说来,对于服务器监控有用处的度量主要有:

  • r(运行队列)
  • pi(页导入)
  • us(用户CPU)
  • sy(系统CPU)
  • id(空闲CPU)
通过vmstat来识别CPU瓶颈:

r(运行队列)展示了正在执行和等待CPU资源的任务个数,当这个值超过了CPU数目,就会出现CPU瓶颈。
Linux下查看CPU核心数的命令:

cat /proc/cpuinfo|grep processor|wc -l
解决CPU瓶颈的办法如下:
  • 1.增加CPU个数或核数(推荐)
  • 2.调整任务的执行时间,如把大任务放到系统不繁忙的时候进行,进而平衡系统的任务。
  • 3.调整已有任务的优先级
通过vmstat识别CPU满负荷:

首先需要声明一点的是,vmstat中CPU的度量是百分比的。当us+sy的值接近100的时候,表示CPU正在接近满负荷工作。但要注意的是,CPU满负荷工作并不能说明什么,Linux总是试图要CPU尽可能的繁忙,使得任务的吞吐量最大化。唯一能够确定CPU瓶颈的还是r(运行队列)的值。

通过vmstat识别内存瓶颈:

当内存的需求大于实际的物理内存时,服务器就会启动虚拟内存机制,通过虚拟内存,可以将内存段移到SWAP DISK的特殊磁盘段上,这样就会出现虚拟内存的页导入和页导出现象。页导出并不能说明出现了内存瓶颈,虚拟内存系统经常会对内存段进行页导出,但是页导入操作就表明服务器需要更多的内存了, 页导入需要从SWAP DISK上将内存段复制回内存,导致服务器速度变慢。

解决内存瓶颈的办法如下:

1.最简单的,增加内存(推荐)
2.改小SGA,使得对内存的需求减少
3.改小PGA,使得对内存的需求减少

标签:Page,命令,vmstat,内存,Linux,磁盘,CPU,虚拟内存
From: https://www.cnblogs.com/even160941/p/18361680

相关文章

  • linux xxx is not in the sudoers file. This incident will be reported.
    前言linux报错:xxxisnotinthesudoersfile.Thisincidentwillbereported.这意味着用户xxx没有在sudoers文件中被授权使用sudo命令。解决su切换到root用户,报错:su:Authenticationfailure使用su-root命令,切换登录root用户成功。su:默认情况下,su命......
  • Linux线程
    一、线程的基本操作pthread_create(pthread_t*thread,constpthread_attr_t*attr,void*(*start_routine)(void*),void*arg) :此函数用于创建新线程。thread 用于存储新创建线程的标识符,attr 可指定线程属性,start_routine 是线程执行的函数指针,arg 为传递给线程执行......
  • Linux iostat命令基本使用
    目录iostat命令介绍iostat命令帮助iostat帮助信息iostat的选项解释iostat命令基本使用查看iostat工具版本直接使用iostat命令每次间隔5秒,查看3次信息只查看磁盘状态以k或M为单位显示信息显示磁盘I/O详细情况查看cpu状态信息iostat命令的使用总结磁盘模块分析CPU模块分析iostat命......
  • Kali Linux 三种网络攻击方法总结(DDoS、CC 和 ARP 欺骗)
    一、引言在当今数字化的时代,网络安全成为了至关重要的议题。了解网络攻击的方法和原理不仅有助于我们增强防范意识,更是网络安全领域专业人员必备的知识。KaliLinux作为一款专为网络安全专业人员和爱好者设计的操作系统,提供了丰富的工具来模拟和研究各种网络攻击手段。本文......
  • Linux expect命令
    Linuxexpect命令​ 在Linux系统中,expect是一款非常有用的工具,它允许用户自动化与需要用户输入进行交互的程序。expect自动交互流程:​ spawn启动指定进程---expect获取指定关键字---send向指定程序发送指定字符---执行完成退出.使用场景自动化登录和操作远程服务器通......
  • Linux下的gdb日常使用
    100个GDB小技巧0.常用0.1获取源代码行与程序地址之间的对应关系(1)显示当前执行指令所在的源代码行:infoline(2)显示特定函数或源代码行的地址信息:infoline<function-name>|<source-file>:<line-number>例如,要查看函数myFunction的起始地址,可以使用:infolinemy......
  • Linux 软件管理
    YUM仓库配置        默认的系统YUM源,需要连接国外的apache网站,网速比较慢,可以修改关联的网络YUM源为国内镜像的网站,比如网易,aliyu等替换yum源yuminstallwget 1.在/etc/yum.repos.d/目录下,备份repos文件cpCentOS-Base.repoCentOs-Base.repo.backup2.下......
  • 最完整版Linux安装mysql8.0(保姆教程)
    目录前言删除已安装的mysql通过yum源安装mysql前言安装mysql可以通过yum源和压缩包两种方式安装,压缩包安装的mysql通常使用的是旧的SysVinit脚本,使用命令如:servicemysqlstart。如果想要交给服务器的任务管理器管理需要进行额外配置,配置中可能会出现一些问题,推荐使......
  • linux 同时tail 多个文件并过滤多个关键字
    多个文件  过滤多个关键字或的关系tail-fcdc-adapter/err_cdc-adapter.logcdc-admin/err_cdc-adapter.logcdc-dpm/err_cdc-dpm.logcdc-extractor/err_cdc-extractor.log|grep-E'.log|ERROR'==>cdc-adapter/err_cdc-adapter.log<==[2024-08-1514:59:25.905......
  • Linux 的常用命令
    1.改变目录cd目录的表达方法:/根目录.当前目录..上一级目录~家目录cd/进入到系统根目录cd.进入当前目录cd..进入当前目录的父目录,返回上层目录cd/tmp进入指定目录/tmpcd~进入当前用户的家目录cd进入当前用户的家目录cd-回到刚才所在的目录2.......