首页 > 系统相关 >Linux:vmstat指令

Linux:vmstat指令

时间:2024-10-29 10:12:41浏览次数:4  
标签:指令 memory vmstat swap Linux cpu 内存

学习自:

Vmstat 命令详解-CSDN博客

Linux 内存之vmstat-CSDN博客

1、Linux分页管理概述

vmstat(Virtual Memory Statistics,虚拟内存),用于对OS虚拟内存、进程、CPU活动进行监控。

它是对系统整体情况的分析,无法对某个进程进行深入分析

1)虚拟内存

Linux系统内存分为物理内存、虚拟内存两种。

物理内存就是物理内存条上的内存。

虚拟内存是逻辑内存,是指利用硬盘上部分空间作为物理内存的补充,将暂时不用内存页写到硬盘上以空出更多的物理内存供又需要的进程使用。当这些内存页需要再次使用时,才从虚拟内存中读回。这一过程对用户透明。

对Linux来说,虚拟内存就是Swap分区

2)页面交换

Linux的内存管理采取的是页式存取,为保证物理内存可以得到充分使用,内核会在适当时机将内存中最近不常用到自动交换到虚拟内存,而将经常使用的信息保存到物理内存。

Linux的页面交换是不定时进行的,以保证尽可能多的空出物理内存,即使当前物理内存充足,它也会交换,以避免出现实际要交换时却等待交换的现象。

Linux的页面交换是有条件的,并非所有页面不用时都会交换到虚拟内存,Linux内核采用最近最常使用算法,仅将一些不经常使用的页面交换到虚拟内存。因此有时会看到这种情况:Liunx的物理内存还有很多,但是swap空间也用了很多,这是正常现象。例如一个占用很多内存的进程运行时需要耗费很多资源,此时会有一些不常用的页面文件交换到swap区,当后续该进程结束并释放内存,刚刚交换出去的页并不会主动交换回来,除非它们将要被使用。此时就会出现上述物理内存空闲、swap空间也有占用的现象。

当swap区要交换进来时,它会首先被交换到物理内存,如果此时没有足够的物理内存容纳这些页,它们会被立刻交换出去。此时swap区也可能没有足够空间来存储这些页,最终导致Linux出现假死机、服务异常情况。

3)Linux页面交换流程

系统中每个进程都需要使用内存,但并非每个进程需要时时刻刻占用内存。

当系统运行所需内存超过了实际物理内存,内核会释放某些进程所占用但未使用的部分或全部物理内存,将这些进程页调度到磁盘空间,即上文提到的swap区。此时在物理内存中空出的内存会提供给有需要的进程使用。

在Linux中,通过调页Paging、交换Swaping实现上述内存调度。调度算法是将最近不常使用的页面交换到swap区,把活动页面留到内存中供进程使用。交换的是整个进程全部页面而非部分页面

页写入磁盘的过程称为Page-Out

页从磁盘重回内存的过程称为Page-In

当内核需要一个页,但是该页不在物理内存中,此时会触发分页错误(Page Fault)

当内核发现可运行内存减少时,就会通过Page-Out释放一部分物理内存。

2、vmstat

1)用途

显示swap区内存信息

2)用法

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]

这里的delay、count不是参数名,而是具体的数字:

delay:每隔多少秒输出一次;

count:一共输出几次

vmstat -a 2 5

每隔2s输出一次,一共输出5次。

3)参数

参数 说明
a

显示active、inactive内存:

active:当前进程使用的内存

inactive:已经分配了,但是还未被使用的内存

s

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

显示内存使用的详细信息

m 显示slabinfo
d

显示磁盘相关统计信息

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

只显示一次表头

如果不加该参数,每输出44行就重复显示一次表头

S

使用指定单位,后跟k、K、m、M。

分别代表103,210,106,220B。

默认为K。

f

显示系统启动至今的fork数量。

fork:Linux函数,用于创建子进程,原进程称为父进程。

V vmstat版本信息

4)输出字段说明

常规

 vmstat

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0      0 389880   3128 281808    0    0    40    17   75  109  0  0 100  0  0

vmstat -a
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free inact active si so bi bo in cs us sy id wa st
3 0 0 470148 156800 76880 0 0 400 79 97 196 0 1 98 0 0

 

指标 用途 说明
procs
r running,运行队列中进程数量

r>cpu个数,代表当前系统运行慢,有较多进程等待cpu

r>4×cpu个数,代表CPU短缺或速率过低

b 等待IO的进程数量 如果disk≠0且b>3,代表io性能不好
memory
swpd 已使用swap空间大小  
free 可用物理内存大小  
buff 缓冲区内存大小  
cache 缓存区内存大小  
inact 非活跃内存(参数-a)  
active 活跃内存(参数-a)  
swap
si 每秒从swap区写到内存的大小  
so 每秒从内存写到swap区的大小  
io
bi 每秒从磁盘读取的页数 如果长期bi、bo≠0,代表内存不足
bo 每秒写入磁盘的页数
system
in 每秒中断数,包括时钟中断  
cs 每秒上下文切换数  
CPU
us 用户进程执行时间百分比

1)id+us+sy=100

2)如果r>4,且id经常<40,表示cpu负荷很重

3)如果id持续为0且sy>2×us,代表系统面临CPU资源短缺的问题

sy 系统进程执行时间百分比
id CPU空闲时间百分比
wa 等待IO时间  
st 被虚拟机使用的CPU时间百分比  

 磁盘:-d

vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
sda     4199      3  350807    3582    308     28   69832     728      0      3
sr0       31      0     147     292      0      0       0       0      0      0

该信息来自/proc/diskstats

指标 用途 说明
reads
total 成功读取的总数  
merged 分组读取(产生一个IO)  
sectors 成功读取的扇区数  
ms 读取花费的毫秒  
writes
total 成功写入的总数  
merged 分组写入(产生一个IO)  
sectors 成功写入的扇区数  
ms 写入花费的毫秒  
IO
cur 正在进行的IO数  
sec IO花费的秒数  

指定磁盘:-p

vmstat -p /dev/sda1
sda1            reads      read sectors      writes  requested writes
                  156             89110           2              4096
指标 用途 说明
reads 来自该分区的读取次数  
read sectors 来自该分区的读扇区次数  
writes 来自该分区的写入次数  
requested writes 来自该分区的写请求次数  

slab:-m

vmstat -m
Cache                       Num  Total   Size  Pages
xfs_dqtrx                     0      0    528     15
xfs_dquot                     0      0    496      8
xfs_buf                    1431   1431    448      9
xfs_bui_item                  0      0    200     20
xfs_bud_item                  0      0    168     24……
kmem_cache_node             256    256     64     64
kmem_cache                  234    234    448      9

该信息来自/proc/slabinfo

Linux的内存分配是以页为单位,但是如果给某些小对象分配一个完整的页,会导致页空间存在浪费。slab可以把页划分为多个相等的小内存单元,再把这些小对象统一分到一个页中,进而减少内部碎片产生(学习自:Linux 内存管理(八)之 slab 分配器_linux slab-CSDN博客)。

5)例子

①每秒采样一次,一共采两次

vmstat 1 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 4  0      0 470088   4168 206808    0    0   538   106  108  228  1  1 98  0  0
 0  0      0 470028   4168 206808    0    0     0     0   84  127  0  0 100  0  0

②指定输出单位为MB:-S

vmstat -S M
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0      0    459      4    201    0    0   457    90  103  211  1  1 98  0  0

③显示活跃、非活跃内存:-a

vmstat -a
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
 3  0      0 470148 156800  76880    0    0   400    79   97  196  0  1 98  0  0

在使用参数-a时,所显示内容相比经典输出,只是增加了active和inact

④查看系统fork了多少次:-f

vmstat -f
         1291 forks

fork是Linux的一个重要函数,代表从原进程中创建一个子进程,原进程称为父进程。

该数据来源于/proc/stat中的processes字段:

cat /proc/stat
cpu  216 1 392 69682 39 86 21 0 0 0
cpu0 216 1 392 69682 39 86 21 0 0 0
intr 58434 ……
ctxt 111387
btime 1730164117
processes 1295
procs_running 3
procs_blocked 0
softirq 57128 7 18948 133 1764 4572 0 101 0 0 31603

⑤显示内存使用的详细信息:-s

vmstat -s
       828592 K total memory
       147540 K used memory
        76888 K active memory
       156836 K inactive memory
       470008 K free memory
         4168 K buffer memory
       206876 K swap cache
      1952764 K total swap
            0 K used swap
      1952764 K free swap
          216 non-nice user cpu ticks
            1 nice user cpu ticks
          397 system cpu ticks
        80120 idle cpu ticks
           39 IO-wait cpu ticks
           95 IRQ cpu ticks
           24 softirq cpu ticks
            0 stolen cpu ticks
       175473 pages paged in
        34748 pages paged out
            0 pages swapped in
            0 pages swapped out
        65064 interrupts
       121999 CPU context switches
   1730164117 boot time
         1296 forks

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

默认显示单位为KB,可以用-S将单位调整为MB

vmstat -sS M
          809 M total memory
          144 M used memory
           75 M active memory
          153 M inactive memory
          458 M free memory
            4 M buffer memory
          202 M swap cache
         1906 M total swap
            0 M used swap
         1906 M free swap
          217 non-nice user cpu ticks
            1 nice user cpu ticks
          398 system cpu ticks
        80731 idle cpu ticks
           40 IO-wait cpu ticks
           96 IRQ cpu ticks
           24 softirq cpu ticks
            0 stolen cpu ticks
       175473 pages paged in
        34748 pages paged out
            0 pages swapped in
            0 pages swapped out
        65420 interrupts
       122594 CPU context switches
   1730164117 boot time
         1297 forks

 

标签:指令,memory,vmstat,swap,Linux,cpu,内存
From: https://www.cnblogs.com/ShineLeBlog/p/18511089

相关文章

  • 黑客常用Linux漏洞扫描工具(含安装步骤)
    第一款:Trivy概述Trivy是一个开源漏洞扫描程序,能够检测开源软件中的CVE。这款工具针对风险提供了及时的解释,开发人员可自行决定是否在容器或应用程序中使用该组件。常规的容器安全协议使用的是静态镜像扫描来发现漏洞,Trivy则是将漏洞扫描工具无缝合并到集成开发环境当中......
  • 禁用Linux的地址空间随机化
    问题描述当我们学习OS的时候,往往需要接触到虚拟地址分配的相关知识。当接触到《OperatingSystems:ThreeEasyPieces》(OperatingSystems:ThreeEasyPieces)中的示例程序mem.c时(文末附上common.h)#include<unistd.h>#include<stdio.h>#include<stdlib.h>#include"c......
  • Escalate_Linux靶机提权学习
    靶机下载https://www.vulnhub.com/entry/escalate_linux-1,323/用VMware打开扫描端口nmap-sS-sV-n-T4-p-192.168.93.134StartingNmap7.94SVN(https://nmap.org)at2024-10-0409:26CSTNmapscanreportfor192.168.93.134Hostisup(0.00090slatency).Not......
  • 【Linux学习】(8)第一个Linux编程进度条程序|git三板斧
    前言第一个Linux编程——进度条git的简单使用一、第一个Linux编程——进度条在写进度条之前我们需要两个基础知识:回车换行缓冲区1.回车换行首先我们需要知道回车换行它是两个概念,回车是回车,换行是换行换行:光标从上往下,直接到下一行(例如光标现在在当前行的第5个......
  • 【Linux探索学习】第五弹——Linux用户管理:创建、删除与查看普通用户
    前言:Linux下创建普通用户是我们以后经常要做的一件事,一个超级用户下可以有多个普通用户,这样我们就可以用这些普通用户去做不同的事情,所以学习如何创建并管理这些用户就显得尤为重要提醒:本篇是在Ubuntu系统下进行的操作目录一、创建普通用户二、测试是否创建成功方法一:方法二:三、查......
  • Linux网络连接三种模式的区别(图解超详细)
    (CentOS安装难点——网络连接方式的理解)参考视频链接为什么选择NAT模式?如上图情景设定:图中三个人在同一个教室网络,可以相互通讯,因为他们三人在同一网段(三者都以192.168.0打头)。1.桥接模式虚拟系统可以和外部系统相互通讯,但是容易造成ip冲突(张三ip:192.168.0.20,他......
  • Linux基础命令:轻松掌握终端操作
    引言在现代IT行业中,Linux因其稳定性和灵活性广受欢迎。作为后端开发、系统管理和数据科学等领域的必备技能,熟练掌握Linux基本命令将使你在职场中更加游刃有余。无论你是刚接触Linux的新手,还是希望提升技能的开发者,了解Linux命令行的基本用法都是至关重要的。今天,我们将探讨一......
  • 网络编程 Linux环境 C语言实现
    进程间通信的延续跨电脑进程间通信一、远程通信方式电路交换------老式有线电话通信​报文交换​分组交换支持分时机制的(分片机制)报文交换​现行网络大部分都是采用分组交换形式二、网络&互联网&因特网网络Network:多台计算机通过某种传输介质连接在一起形成......
  • linux shell特殊参数
    $n功能描述:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要使用大括号包含,如${10}$*功能描述:这个变量代表命令行中的所有参数,此命令把所有参数看成一个整体$@功能描述:这个变量也代表命令行中的所有的参数,但是此命令把每个参数区分对待注意:$*与$@区别在于......
  • 预处理指令、构建大型程序
    练习:编写程序从键盘得到一个包含多个考试成绩的字符串,字符串格式如下10,20,30,40,50计算所有考试成绩的和并把结果显示在屏幕上练习:编写一个模拟登录练习,一共给用户三次登录机会,每次要求用户输入用户名和密码如果输入的用户名是admin密码是123456就是正确的。登陆三次之后要给出提......