Linux shell编程学习笔记64:vmstat命令 获取进程、内存、虚拟内存、IO、cpu等信息


0 前言

在系统安全检查中,通常要收集进程、内存、IO等信息。Linux提供了功能众多的命令来获取这些信息。今天我们先研究vmstat命令。

1.vmstat命令的功能、用法、选项说明和注意事项

1.1 vmstat命令的功能

vmstat是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可以对系统的进程情况、内存使用情况、交换页和   I/O 块使用情况、中断以及 CPU 使用情况进行统计并报告相应的信息。

我们可以使用命令vmstat --help 来查看 vmstat命令的帮助信息。 

[purpleendurer @ bah /w] vmstat --helpUsage:vmstat [options] [delay [count]]Options:-a, --active           active/inactive memory-f, --forks            number of forks since boot-m, --slabs            slabinfo-n, --one-header       do not redisplay header-s, --stats            event counter statistics-d, --disk             disk statistics-D, --disk-sum         summarize disk statistics-p, --partition <dev>  partition specific statistics-S, --unit <char>      define display unit-w, --wide             wide output-t, --timestamp        show timestamp-h, --help     display this help and exit-V, --version  output version information and exitFor more details see vmstat(8).
[purpleendurer @ bah /w] 

 

1.2 vmstat命令的用法

 vmstat [选项] [刷新延时 [刷新次数]]

1.3 vmstat命令的选项说明

选项说明

-a

--active

活动/非活动内存

-f

--forks

显示自启动以来的 fork 数量

fork是任何在保持活动状态的同时生成另一个进程的进程。

这里的 fork 数量包括 fork、vfork 以及 clone 等系统调用!

-m

--slabs

slabinfo

-n

--one-header

不重新显示标头

-s

--stats

事件计数器统计

-d

---disk

磁盘统计信息

-D

--disk-sum

汇总磁盘统计信息

-p

--partition <dev>

分区特定统计信息

-S

--unit <char>

定义输出的结果中的显示单位,

内存数据的单位默认是 KB,可以通过 -S 选项调整显示的单位,有下面几种单位可供选择:

  • k:1000 bytes
  • K:1024 bytes
  • m:1000 * 1000 bytes
  • M:1024 * 1024 bytes

注意:-S 选项对 si、 so 字段无效

-w

--wide

宽输出

vmstat 结果中的某些字段的数字有时会比较长,而且跟字段名的位置有偏差, 不太适合人类的观看习惯,-w 选项可以按照宽模式显示数据,使结果看起来更直观,下图是分别未使用宽模式和使用了宽模式的一个对比!

-t

--timestamp

显示时间戳

-h

--help

显示此帮助并退出

-V

--version

输出版本信息并退出

1.4 注意事项

  1. 运行 vmstat 不须要特别的使用权限
  2. 这些系统信息是用来向用户提供分析系统瓶颈问题信息的。
  3. linux在计算进程情况时不将正在运行的 vmstat 自己计算进去。
  4. 当前所在的 linux 块的大小都是 1K,而 CD-ROM 文件系统的块大小为 2K。
  5. 对于 slabinfo,需要使用 -m 命令行选项。请注意,您的 Linux 发行版内核需要支持 slabinfo 才能使用此选项。如果支持,则您需要使用 sudo 权限运行该命令。

 

2 vmstat命令实例

2.1 vmstat : 显示当前进程、内存、虚拟内存、读写、系统、cpu 信息

[purpleendurer @ bash ~] vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st3  0      0 2014768  39912 1532180    0    0   347  1611  443  752  2  1 96  1  0
[purpleendurer @ bash ~] 

 

命令执行后返回的信息包括 procs(进程)、memory(内存)、swap(交换分区 或 虚拟内存)、io(磁盘读/写)、system(系统)、cpu 共6个部分内容。

每个部分的含义如下:

字段含义
procs

  • r :等待运行的进程数,数量越大,系统越繁忙。
  • b:不可被唤醒的进程数量,数量越大,系统越繁忙。
  • w:被交换出去的可运行的进程数。

 此数由 linux 计算得出,但 linux 并不耗尽交换空间

这里的不可中断是指 一个进程在执行某些系统调用时进入的状态,在这种状态下,进程被阻塞,并且不能被中断,直到完成系统调用!

memory 
  • swpd :虚拟内存的使用情况,单位为 KB。
  • free   :空闲的内存容量,单位为 KB。
  • buff   :缓存I/O操作的内存容量,单位为 KB。
  • cache:缓存文件系统数据块的内存容量,单位为 KB。
  • inact  :非活跃内存大小,即被标明可回收的内存,区别于free和active
  • active:活跃的内存大小
swap 
  • si :从磁盘交换到内存的交换页数量,单位为 KB。
  • so:从内存交换到磁盘的交换页数量,单位为 KB。
这两个数越大,表明数据需要经常在磁盘和内存之间进行交换,系统性能越差。
io 
  • bi :从块设备读入的块数(读磁盘),单位是块/秒。
  • bo:写到块设备的块数(写磁盘),单位是块/秒。
这两个数越大,代表系统的 I/O 越繁忙。
system 
  • in:每秒的中断数,包括时钟中断。
  • cs:每秒的环境(上下文)切换次数。
这两个数越大,代表系统与接口设备的通信越繁忙。
cpu 
  • us :(user time)用户进程消耗 CPU 运算时间的百分比。
  • sy :(system time) 系统进程消耗cpu运算时间的百分比。
  • id  :(idle)空闲 CPU 的百分比。
  • wa:(wait)等待 I/O 所消耗的 CPU 百分比。
  • st  :(steal)被虚拟机所盗用的 CPU 百分比。

 2.2    vmstat -a : 显示活动/非活动内存

[purpleendurer @ bash ~] vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st3  0      0 2014768  39912 1532180    0    0   347  1611  443  752  2  1 96  1  0
[purpleendurer @ bash ~] vmstat -a
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st4  0      0 2014440 1557064  89764    0    0   309  1436  431  742  2  1 96  1  0
[purpleendurer @ bash ~] 

我们对比执行vmstat 和 vmstat -a 命令返回的信息,可以看到, vmstat -a 命令返回的memory部分中,原来属于buff和cache的位置 显示了 inact 和 active 两个信息。 

2.3 vmstat -d:显示磁盘统计信息

[purpleendurer @ bash ~] vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------total merged sectors      ms  total merged sectors      ms    cur    sec
vda     5730   2258  678968    7095  10127  44510 3156280  206114      0     10
zram0      0      0       0       0      0      0       0       0      0      0
[purpleendurer @ bash ~] 

 

命令返回信息包括 disk(磁盘名称)、reads(读)、writes(写)、IO(输入输出)四部分内容,具体说明如下:

字段含义
disk
  • VDA:是一种Linux内核的驱动程序它在虚拟环境中提供了与实体硬件磁盘交互的方式。 如果我们在虚拟机中添加了新的硬盘,那么这个硬盘就会被创建为一个虚拟磁盘,并由VDA驱动来进行管理和操作。
  • zram: 最初被称为 “compcache”,即 “压缩的高速缓存”。事实证明,zram 是一个用于创建内存内压缩缓存的工具,特别是作为交换空间使用。
reads
  • total       : 成功读取的总数
  • merged  :分组读取(产生一个 IO)
  • sectors   :成功读取的扇区数
  • ms          :读取花费的时间,单位为毫秒
writes
  • total       : 成功写入的总数
  • merged  :分组写入(产生一个 IO)
  • sectors   :成功写入的扇区数
  • ms          :写入花费的时间,单位为毫秒
IO
  • cur:正在进行的IO
  • s   :IO花费的时间,单位为秒

2.4 vmstat -D:汇总磁盘统计信息

[purpleendurer @ bash ~] vmstat -D2 disks 5 partitions 5720 total reads2258 merged reads678240 read sectors7088 milli reading9303 writes43535 merged writes3141200 written sectors205722 milli writing0 inprogress IO10 milli spent IO
[purpleendurer @ bash ~] 

信息说明
 2 disks            磁盘数
5 partitions         分区数
 5720 total reads读取数据块数
 2258 merged reads      分组读取(产生一个 IO)数
678240 read sectors读取的扇区个数
7088 milli reading读取时间,毫秒
9303 writes写入的数据块数
43535 merged writes分组写入(产生一个 IO)数
3141200 written sectors已写的扇区个数
205722 milli writing写入时间,毫秒
0 inprogress IO进行中的IO个数
10 milli spent IOIO花费的时间,毫秒

 

2.5 vmstat -f:显示自启动以来的 fork 数量

[purpleendurer @ bash ~] vmstat -f1391 forks
[purpleendurer @ bash ~] 

 

 

可见,自启动以来的 fork 数量为1391。

2.6  vmstat -p /dev/vda1: 查看分区/dev/vda1的信息

[purpleendurer @ bash ~] lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda    253:0    0   40G  0 disk 
├─vda4 253:4    0  9.5G  0 part 
├─vda2 253:2    0  127M  0 part 
├─vda5 253:5    0   30G  0 part /dev/termination-log
├─vda3 253:3    0  384M  0 part 
└─vda1 253:1    0    1M  0 part 
[purpleendurer @ bash ~] vmstat -p /dev/vda1
vda1          reads   read sectors  writes    requested writes14        112          0          0
[purpleendurer @ bash ~] 

 

我们先使用lsblk命令查看当 前系统中的分区信息,然后指定查看分区/dev/vda1的信息。

命令返回的分区/dev/vda1的信息含义如下:

信息含义
vda1分区名称
reads                  14读取的数据块数
read sectors      112读取的扇区数
writes                    0写入的数据块数
requested writes   0请求写入的数据块数

2.7 vmstat -s:显示事件计数器统计信息

[purpleendurer @ bash ~] vmstat -s3855940 K total memory277356 K used memory88576 K active memory1567116 K inactive memory2004888 K free memory40140 K buffer memory1533556 K swap cache0 K total swap0 K used swap0 K free swap2455 non-nice user cpu ticks0 nice user cpu ticks1125 system cpu ticks122725 idle cpu ticks949 IO-wait cpu ticks142 IRQ cpu ticks69 softirq cpu ticks0 stolen cpu ticks340856 pages paged in1580340 pages paged out0 pages swapped in0 pages swapped out534656 interrupts930534 CPU context switches1721145727 boot time1272 forks
[purpleendurer @ bash ~] 

 

 返回信息的含义如下:

信息含义
     3855940 K total memory       内存总数
      277356 K used memory 已使用内存数
        88576 K active memory活跃内存数
      1567116 K inactive memory非活跃内存数
      2004888 K free memory未分配使用内存数
         40140 K buffer memory缓存I/O操作的内存容数
     1533556 K swap cache缓存文件系统数据块的内存数
               0 K total swap虚拟内存总数
                0 K used swap已使用虚拟内存数
                0 K free swap未分配使用虚拟内存数
         2455 non-nice user cpu ticks非友好用户占用的CPU时间
                0 nice user cpu ticks友好用户占用的CPU时间
          1125 system cpu ticks系统占用的CPU时间
       122725 idle cpu ticks空闲的CPU时间
            949 IO-wait cpu ticks等待IO操作的占用的CPU时间
             142 IRQ cpu ticks(来自设备的)硬中断请求占用的CPU时间
               69 softirq cpu ticks软中断请求占用的CPU时间
                 0 stolen cpu ticks虚拟机盗用的 CPU 百分比
       340856 pages paged in块设备数据的读入内存的页数
      1580340 pages paged out写入块设备的内存页数
                  0 pages swapped in从块设备swap区中读入的页数
                  0 pages swapped out从块设备swap区中读出的页数
        534656 interrupts中断数
 930534 CPU context switchesCPU上下文切换次数
    1721145727 boot time系统运行时间
           1272 forksfork数

2.8 vmstat -t -w:宽行显示时间戳

[purpleendurer @ bash ~] vmstat -t
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st                 CST2  0      0 2012752  40516 1532440    0    0   197   919  386  696  2  1 97  0  0 2024-07-16 23:38:12
[purpleendurer @ bash ~] vmstat -t -w
procs -----------------------memory---------------------- ---swap-- -----io---- -system-- --------cpu-------- -----timestamp-----r  b         swpd         free         buff        cache   si   so    bi    bo   in   cs  us  sy  id  wa  st                 CST3  0            0      2013128        40676      1532556    0    0   183   855  381  691   2   1  97   0   0 2024-07-16 23:39:17
[purpleendurer @ bash ~] 

返回的命令执行结果中增加了timestamp的内容。

我们也可以从对比中看到-w选项的作用。

2.9 vmstat -S M -t 1 3 :以M为单位,延迟1秒输出3次,带时间戳

[purpleendurer @ bash ~] vmstat -S M -t 1 3 
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- -----timestamp-----r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st                 CST2  0      0   1955     39   1497    0    0   170   791  386  703  1  1 97  0  0 2024-07-17 00:18:500  0      0   1955     39   1497    0    0     0     0  632 1200  0  1 99  0  0 2024-07-17 00:18:510  0      0   1955     39   1497    0    0     0    16  839 1801  2  0 98  1  0 2024-07-17 00:18:52
[purpleendurer @ bash ~] 

从时间戳可以看出来,命令每隔1秒钟显示一次信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/872469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM(day4)类加载机制

类加载过程 加载 通过一个类的全限定名来获取定义此类的二进制字节流。 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 在内存中生成一个代表这个类的java.lang.Class对象&#xff0c;作为方法区这个类的各种数据的访问入口。 验证 文件格式验证 元数…

防御笔记第七天(时需更新)

1.防火墙的可靠性&#xff1a; 因为防火墙不仅需要同步配置信息&#xff0c;还需要同步状态信息&#xff08;会话表等&#xff09;&#xff0c;所以防火墙不能像路由器那样单纯靠动态协议来进行切换&#xff0c;还需要用到双击热备技术。 双机---目前双机技术仅仅支持两台防火…

环境配置|PyCharm——Pycharm本地项目打包上传到Github仓库的操作步骤

一、Pycharm端的设置操作 通过Ctrl+Alt+S快捷组合键的方式,打开设置,导航到版本控制一栏中的Git,在Git可执行文件路径中,输入Git.exe。 按照下图顺序,依次点击,完成测试。输出如图标④的结果,即可完成测试。 输出下图结果,配置Git成功,如本地未安装Git,需自行安装。

鸿蒙特色物联网实训室

一、 引言 在当今这个万物皆可连网的时代&#xff0c;物联网&#xff08;IoT&#xff09;正以前所未有的速度改变着我们的生活和工作方式。它如同一座桥梁&#xff0c;将实体世界与虚拟空间紧密相连&#xff0c;让数据成为驱动决策和创新的关键力量。随着物联网技术的不断成熟…

redis登录缓存

1.pom.xml中引入redis依赖 <!-- Redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> 2.将登录成功的token存储到redis中 if(Md5…

Python面试全攻略:基础知识、特性、算法与实战解析

随着Python的普及&#xff0c;越来越多的人开始学习Python并尝试在面试中展示自己的技能。在这篇文章中&#xff0c;我们将探讨Python面试需要注意的问题以及一些经典的Python算法。 一、Python面试需要注意的问题 基础知识 在Python面试中&#xff0c;基础知识是非常重要的。…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【23】【订单服务】

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【23】【订单服务】 订单中心订单信息用户信息订单基础信息商品信息优惠信息支付信息物流信息 订单状态订单流程订单创建与支付逆向流程 订单确认页Feign远程调用丢失请求头问题Feign异步…

LabVIEW设备检修信息管理系统

开发了基于LabVIEW设计平台开发的设备检修信息管理系统。该系统应用于各种设备的检修基地&#xff0c;通过与基地管理信息系统的连接和数据交换&#xff0c;实现了本地检修工位数据的远程自动化管理&#xff0c;提高了设备的检修效率和安全性。 项目背景 现代设备运维过程中信…

Microsoft Edge(简称Edge)

Microsoft Edge&#xff08;简称Edge&#xff09;是一款由微软开发的网页浏览器&#xff0c;它为用户提供了许多便捷的功能和选项。以下是Edge浏览器的使用方法&#xff1a; 一、基本使用方法 打开Edge浏览器&#xff1a; 可以在Windows的开始菜单中找到“Microsoft Edge”并点…

MySQL 进阶(四)【锁】

1、锁 1.1、锁的概述 锁就不需要多介绍了&#xff0c;多个用户访问共享数据资源&#xff0c;如何保证数据并发访问的一致性、有效性是数据库最重要的问题。同时&#xff0c;锁冲突也是影响一个数据库并发性能最重要的因素。 MySQL 中锁的划分有三类&#xff1a; 全局锁&…

2024-07-12升级问题:Android SDK升级导致 Canvas.FULL_COLOR_LAYER_SAVE_FLAG 等标志位无法使用

Canvas.FULL_COLOR_LAYER_SAVE_FLAG 是一个标志位&#xff0c;用于在 Android 的 Canvas 类中保存画布的颜色层。当使用 saveLayer() 方法时&#xff0c;可以传递这个标志位来指示保存整个颜色层。这样&#xff0c;在恢复画布状态时&#xff0c;颜色层也会被恢复。 工程从Andr…

如何通过网络快速搜寻到自己的STM32设备

目录 一、问题概述 二、解决思路 三、代码实现 1.创建任务 2.UDP广播接收 一、问题概述 以前一直用RS232串口修改设备配置信息&#xff0c;但是现场施工人员的232线太细&#xff0c;经常容易断掉&#xff0c;这次准备用网口去修改&#xff0c;遇到了一个问题&#xff0c;…

C语言学习笔记[24]:循环语句while②

getchar()的使用场景 int main() {char password[20] {0};printf("请输入密码&#xff1a;");//输入 123456 后回车scanf("%s", passwoed);//数组名本身就是数组地址printf("请确认密码&#xff1a;Y/N");int ch getchar();if(Y ch)printf(&…

区块链学习05-web3中solidity和move语言

Solidity 和 Move 语言的比较&#xff1a;Web3 开发中的两种选择 Solidity 和 Move 都是用于开发区块链平台智能合约的编程语言。它们具有一些相似之处&#xff0c;但也存在一些关键差异。 相似之处: Solidity 和 Move 都是图灵完备语言&#xff0c;这意味着它们可以表达计算…

JavaEE:Spring Web简单小项目实践二(用户登录实现)

学习目的&#xff1a; 1、理解前后端交互过程 2、学习接口传参&#xff0c;数据返回以及页面展示 1、准备工作 创建SpringBoot项目&#xff0c;引入Spring Web依赖&#xff0c;添加前端页面到项目中。 前端代码&#xff1a; login.html <!DOCTYPE html> <html lang&…

关于window配置gitlab和gitee平台共存

今天使用gitlab拉取代码突然提示 gitgitlab.xxx.com: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 以为是ssh公钥没有配置好&#xff0c;遂又进行了一番配置&#xff0c;实际上并不是这个问题造成的&#xff0c;但还是想记录一下步骤&#xff0c;以…

<Rust><GUI>rust语言GUI库tauri体验:前、后端结合创建一个窗口并修改其样式

前言 本文是rust语言下的GUI库&#xff1a;tauri来创建一个窗口的简单演示&#xff0c;主要说明一下&#xff0c;使用tauri这个库如何创建GUI以及如何添加部件、如何编写逻辑、如何修改风格等&#xff0c;所以&#xff0c;这也是一个专栏&#xff0c;将包括tauri库的多个方面。…

小阿轩yx-zookeeper+kafka群集

小阿轩yx-zookeeperkafka群集 消息队列(Message Queue) 是分布式系统中重要的组件 通用的使用场景可以简单地描述为 当不需要立即获得结果&#xff0c;但是并发量又需要进行控制的时候&#xff0c;差不多就是需要使用消息队列的时候。 消息队列 什么是消息队列 消息(Mes…

【HarmonyOS开发】弹窗交互(promptAction )

实现效果 点击按钮实现不同方式的弹窗showToast showDialog showActionMenu 代码实现 1.引入’ohos.promptAction’ import promptAction from ohos.promptAction;2.通过promptAction 实现系统既定的弹窗 import promptAction from ohos.promptAction;Entry Component st…

鸿蒙语言基础类库:【@system.geolocation (地理位置)】

地理位置 说明&#xff1a; 从API Version 7 开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.geolocation]。本模块首批接口从API version 3开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import geolocation from …