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 --help

Usage:
 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 exit

For 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 st
 3  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 st
 3  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 st
 4  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 -D
            2 disks 
            5 partitions 
         5720 total reads
         2258 merged reads
       678240 read sectors
         7088 milli reading
         9303 writes
        43535 merged writes
      3141200 written sectors
       205722 milli writing
            0 inprogress IO
           10 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 -f
         1391 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 writes
                  14        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 -s
      3855940 K total memory
       277356 K used memory
        88576 K active memory
      1567116 K inactive memory
      2004888 K free memory
        40140 K buffer memory
      1533556 K swap cache
            0 K total swap
            0 K used swap
            0 K free swap
         2455 non-nice user cpu ticks
            0 nice user cpu ticks
         1125 system cpu ticks
       122725 idle cpu ticks
          949 IO-wait cpu ticks
          142 IRQ cpu ticks
           69 softirq cpu ticks
            0 stolen cpu ticks
       340856 pages paged in
      1580340 pages paged out
            0 pages swapped in
            0 pages swapped out
       534656 interrupts
       930534 CPU context switches
   1721145727 boot time
         1272 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                 CST
 2  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                 CST
 3  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                 CST
 2  0      0   1955     39   1497    0    0   170   791  386  703  1  1 97  0  0 2024-07-17 00:18:50
 0  0      0   1955     39   1497    0    0     0     0  632 1200  0  1 99  0  0 2024-07-17 00:18:51
 0  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.mfbz.cn/a/803586.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java数据结构】初始线性表之一:链表

为什么要有链表 上一节我们描述了顺序表&#xff1a;【Java数据结构】初识线性表之一&#xff1a;顺序表-CSDN博客 并且进行了简单模拟实现。通过源码知道&#xff0c;ArrayList底层使用数组来存储元素。 由于其底层是一段连续空间&#xff0c;当在ArrayList任意位置插入或者…

NGFW和防火墙的区别?

NGFW&#xff08;Next Generation Firewall&#xff0c;下一代防火墙&#xff09;和FW&#xff08;Firewall&#xff0c;防火墙&#xff09;在网络安全领域都扮演着重要角色&#xff0c;但它们在功能、性能和应用场景上存在显著的区别。以下是NGFW和FW之间的主要区别&#xff1…

数据库作业九

1、安装redis&#xff0c;启动客户端、验证。 2、string类型数据的命令操作&#xff1a; &#xff08;1&#xff09; 设置键值&#xff1a; &#xff08;2&#xff09; 读取键值&#xff1a; ​ &#xff08;3&#xff09; 数值类型自增1&#xff1a; ​ &#xff08;4&am…

NFT项目的第三方功能及接口

NFT项目涉及到第三方功能及接口的情况非常常见&#xff0c;因为NFT项目本身的功能通常是有限的&#xff0c;需要通过与第三方功能和接口的整合来实现更丰富的功能和更好的用户体验。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 以下…

【LeetCode】十六、并查集

文章目录 1、并查集Union Find2、并查集find的优化&#xff1a;路径压缩 Quick find3、并查集union的优化&#xff1a;权重标记4、leetcode200&#xff1a;岛屿数量解法一&#xff1a;DFS 1、并查集Union Find 并查集&#xff0c;一种树形的数据结构&#xff0c;处理不相交的两…

如何在excel表中实现单元格满足条件时整行变色?

可以试试使用条件格式&#xff1a; 一、条件格式 所谓“自动变色”就要使用条件格式。 先简单模拟数据如下&#xff0c; 按 B列数字为偶数 为条件&#xff0c;整行标记为蓝色背景色。 可以这样设置&#xff1a; 先选中1:10行数据&#xff0c;在这里要确定一下名称栏里显示…

DNS查询过程

DNS&#xff08;域名系统&#xff0c;Domain Name System&#xff09;是一个用于将域名和IP地址相互映射的系统。当你在浏览器中输入一个网址时&#xff0c;浏览器会通过DNS查询过程来找到对应的IP地址&#xff0c;以便能够连接到目标服务器。其查询过程一般通过以下步骤&#…

Apple Vision Pro 和其商业未来

机器人、人工智能相关领域 news/events &#xff08;专栏目录&#xff09; 本文目录 一、Vision Pro 生态系统二、Apple Vision Pro 的营销用例 随着苹果公司备受期待的进军可穿戴计算领域&#xff0c;新款 Apple Vision Pro 承载着巨大的期望。 苹果公司推出的 Vision Pro 售…

MySQL数据库慢查询日志、SQL分析、数据库诊断

1 数据库调优维度 业务需求&#xff1a;勇敢地对不合理的需求说不系统架构&#xff1a;做架构设计的时候&#xff0c;应充分考虑业务的实际情况&#xff0c;考虑好数据库的各种选择(读写分离?高可用?实例个数?分库分表?用什么数据库?)SQL及索引&#xff1a;根据需求编写良…

Qt窗口程序整理汇总

到今日为止&#xff0c;通过一个个案例的实验&#xff0c;逐步熟悉了 Qt6下 窗体界面开发的&#xff0c;将走过的路&#xff0c;再次汇总整理。 Qt Splash样式的登录窗https://blog.csdn.net/castlooo/article/details/140462768 Qt实现MDI应用程序https://blog.csdn.net/cast…

数据库课设---学生宿舍管理系统(sql server+C#)

1.引言 1.1 内容及要求 设计内容&#xff1a;设计学生宿舍管理系统。 设计要求&#xff1a; &#xff08;1&#xff09;数据库应用系统开发的需求分析&#xff0c;写出比较完善系统功能。 &#xff08;2&#xff09;数据库概念模型设计、逻辑模型设计以及物理模型设计。 …

【数学建模】——多领域资源优化中的创新应用-六大经典问题解答

目录 题目1&#xff1a;截取条材 题目 1.1问题描述 1.2 数学模型 1.3 求解 1.4 解答 题目2&#xff1a;商店进货销售计划 题目 2.1 问题描述 2.2 数学模型 2.3 求解 2.4 解答 题目3&#xff1a;货船装载问题 题目 3.1问题重述 3.2 数学模型 3.3 求解 3.4 解…

JS爬虫实战之极验四代

极验四代滑块验证码 一、目标网站说明二、流程步骤1. 逆向步骤一般分为&#xff1a;2. 接口确认1- 确认流程2- 获取verify的参数3- 构建requests验证verify的参数4- 锁定secode参数的作用 ok&#xff0c;让我们去获取verify接口中的响应&#xff01;&#xff01;&#xff01; 3…

el-table表格操作列错行处理

解决方法&#xff1a; <style>::v-deep .el-table th.el-table__cell > .cell {white-space: nowrap !important;} </style>

【C++航海王:追寻罗杰的编程之路】智能指针

目录 1 -> 为什么需要智能指针&#xff1f; 2 -> 内存泄漏 2.1 ->什么是内存泄漏&#xff0c;以及内存泄漏的危害 2.2 -> 内存泄漏分类 2.3 -> 如何避免内存泄漏 3 -> 智能指针的使用及原理 3.1 -> RAII 3.2 -> 智能指针的原理 3.3 -> std…

Kafka Producer发送消息流程之Sender发送线程和在途请求缓存区

文章目录 1. Sender发送数据1. 发送数据的详细过程&#xff1a;2. 关键参数配置 2. 在途请求缓存区 1. Sender发送数据 Sender线程负责将已经在RecordAccumulator中准备好的消息批次发送到Kafka集群。虽然消息在RecordAccumulator中是按照分区组织的&#xff0c;但Sender线程在…

【C++】类和对象的基本概念与使用

本文通过面向对象的概念以及通俗易懂的例子介绍面向对象引出类和对象。最后通过与之有相似之处的C语言中的struct一步步引出C中的类的定义方式&#xff0c;并提出了一些注意事项&#xff0c;最后描述了类的大小的计算方法。 一、什么是面向对象&#xff1f; 1.面向对象的概念 …

基于python的图像去水印

1 代码 import cv2 import numpy as npdef remove_watermark(image_path, output_path):# 读取图片image cv2.imread(image_path)# 转换为灰度图gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 使用中值滤波去除噪声median_filtered cv2.medianBlur(gray, 5)# 计算图像的梯…

Ambari Hive 创建函数无权限

作者&#xff1a;櫰木 1、创建udf函数 参考文档&#xff1a;https://blog.csdn.net/helloxiaozhe/article/details/102498567 如果已经编写好&#xff0c;请使用自己的。如果没有请参考以上链接进行udf函数编写。 2、创建函数遇到的问题 由于集群开启了kerberos&#xff0…

常用的点云预处理算法

点云预处理是处理点云数据时的重要部分&#xff0c;其目的是提高点云数据的质量和处理效率。通过去除离群点、减少点云密度和增强特征&#xff0c;可以消除噪声、减少计算量、提高算法的准确性和鲁棒性&#xff0c;从而为后续的点云处理和分析步骤&#xff08;如配准、分割和重…