性能测试必备监控技能linux篇

news2024/11/18 6:22:25

前言

如果性能测试的目标服务器是linux系统,在如何使用linux自带的命令来实现性能测试过程的监控分析呢?

对于日常性能测试来讲,在linux下或是类Unix系统,我们必须掌握以下常用的指标查看命令。

  • ps

  • pstree

  • top

  • free

  • vmstat

  • iostat

  • iotop

  • sar

当然还有其他命令,这里就上述笔者常用的命令推荐大家掌握。

如果你想学习性能测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的性能测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386   

15天学会性能测试,通俗易懂详细教学,Jmeter性能测试实战(集群压测,全链路压测,性能调优,瓶颈分析)极速掌握,干就完事!_哔哩哔哩_bilibili15天学会性能测试,通俗易懂详细教学,Jmeter性能测试实战(集群压测,全链路压测,性能调优,瓶颈分析)极速掌握,干就完事!共计27条视频,包括:1.【性能测试】什么是性能测试以及性能测试的价值和目的、2.【性能测试】真实企业性能测试指标详解以及指标测算、3.【性能测试】真实企业中性能测试流程以及细节剖析等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV1B14y1D7X9/?spm_id_from=333.337.search-card.all.click

ps

ps命令能给出当前系统中进程的快照。下面我们列举几个常用的选项,对于其他的请参考官方文档或是自行搜索相关文档。

  • 使用 -a 参数。-a 代表 all。同时加上x参数会显示没有控制终端的进程。

ps -ax
  • 通过我们会查找某类或包含某些指定关键字的进程,这是会使用管道结合grep命令来进一步过滤结果。

例如查找java相关的进程ps -ax | grep java
  • 有时我们则需要根据CPU和内存的使用情况来过滤排序筛选结果,这样便于快速找到哪个进程最耗CPU、内存

ps -aux
  • 根据CPU的使用升序排序

ps -aux --sort -pcpu
  • 根据内存使用升序排序

ps -aux --sort -pmem
  • 上述两个命令合并一起,如下:

ps -aux --sort -pcpu,+pmem
  • 只显示前几个进程,例如显示前十个,需要使用管道结合head命令。

ps -aux | head -n 10

还有很多用法,这里就不做过多的列举。

pstree

pstree命令以树状图显示进程间的关系。

下面我们看几个常用的示例。

  • 以树状图显示进程,只显示进程的名字,且相同进程合并显示。

pstree
  • 以树状图显示进程,还显示进程PID。

pstree -p
  • 以树状图显示进程PID为<pid>的进程以及子孙进程,如果有-p参数则同时显示每个进程的PID。

pstree <pid>或

pstree -p <pid>
  • 以树状图显示进程,相同名称的进程不合并显示,并且会显示命令行参数,如果有-p参数则同时显示每个进程的PID。

pstree -a

为什么要用pstree命令,通过该命令,能让你更清晰的了解你要监控的目标服务关联了哪些资源,能让你更加清楚其资源关联情况,增加在性能测试过程中分析的准确性。

不管是ps还是pstree命令,在性能测试过程中,最重要的一个应用技巧就是获取资源消耗最高的目标进程的线程id。例如:

ps -mp <pid> -o HTREAD 
或
ps -Lfp <pid><pid> 为目标进程id

在找到其线程id后就可以使用

printf "%x\n" 线程id

转换成十六进制数

然后结合jstack命令,获取其堆栈信息以供分析。

top

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。

与ps不同的是,top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。

直接使用即可

top

常规情况下主要关注以下指标:

  • load average: 0.02, 0.10, 0.13 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

  • total 进程总数

  • running 正在运行的进程数

  • sleeping 睡眠的进程数

  • stopped 停止的进程数

  • zombie 僵尸进程数

Cpu(s):

  • us 用户空间占用CPU百分比

  • sy 内核空间占用CPU百分比

  • id 空闲CPU百分比

Mem:

  • total 物理内存总量

  • used 使用的物理内存总量

  • free 空闲内存总量

  • buffers 用作内核缓存的内存量

对于进程详细的表头重点关注: PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。

具体含义不做说明了。

另外常用的top命令选项如下: top 每隔5秒显式所有进程的资源占用情况
top -d 2 每隔2秒显式所有进程的资源占用情况
top -c 每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
top -p <pid1> -p <pid2> 每隔5秒显示pid是pid1和pid是pid2的两个进程的资源占用情况
top -d 2 -c -p <pid> 每隔2秒显示pid是pid的进程的资源使用情况,并显式该进程启动的命令行参数

free

查看内存情况,将used的值减去buffer和cache的值就是你当前真实内存使用。

Mem:表示物理内存统计

  • total:表示物理内存总量(total = used + free)

  • used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。

  • free:未被分配的内存。

  • shared:共享内存,一般系统不会用到。

  • buffers:系统分配但未被使用的buffers 数量。

  • cached:系统分配但未被使用的cache 数量。

-/+ buffers/cache:表示物理内存的缓存统计

  • used:也就是第一行中的used – buffers-cached 也是实际使用的内存总量。

  • Swap:表示硬盘上交换分区的使用情况,这里我们不做关注。

但对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。 所以从应用程序的角度来说 可用内存=系统free memory+buffers+cached.

buffers是指用来给块设备做的缓冲大小,只记录文件系统的metadata以及 tracking in-flight pages.
cached是用来给文件做缓冲。

使用free命令,能让你清楚的了解当前系统内存消耗情况。

vmstat

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。

相比于top、free等命令,vmstat可以看到整个机器的CPU,内存,IO的消耗情况。

一般情况下vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如下命令:

vmstat 2 1

2表示每个两秒采集一次服务器状态,1表示只采集一次。

这个命令是做性能测试进一步诊断分析必须掌握的的

下面我们对其进行更详细的说明:

procs

  • r列 显示运行和等待CPU时间片的进程数,若其值长时间大于系统CPU个数,就说明CPU资源可能不足,可以考虑增加CPU;

  • b列 显示在等待资源的进程数,比如正在等待I/O或者内存交换等。

memory

  • swpd列 显示切换到内存交换区的内存数量(以KB为单位)。若swpd的值不为0或者比较大,同时si、so的值长时间为0,那这种情况一般不用担心,不会影响系统性能

  • free列 显示当前空闲的物理内存数量(以KB为单位)

  • buff列 显示buffers cache的内存数量,一般对块设备的读写才需要缓冲

  • cache列 显示page cached的内存数量,一般作文件系统的cached,频繁访问的文件都会被cached。如果cached值较大,就说明cached文件数较多。如果此时IO中的bi比较小,就说明文件系统效率比较好

swap

  • si列 显示由磁盘调入内存,也就是内存进入内存交换区的数量

  • so列 显示由内存调入磁盘,也就是内存交换区进入内存的数量

一般情况下,si、so的值都为0,如果si、so的值长时间不为0,则表示系统内存不足,需要考虑是否增加系统内存。

IO

  • bi列 显示从块设备读入的数据总量(即读磁盘,单位KB/秒)

  • bo列 显示写入到块设备的数据总量(即写磁盘,单位KB/秒)

这里设置的bi+bo参考值为1000,如果超过1000,而且wa值比较大,则表示系统磁盘IO性能瓶颈。

system

  • in列表示在某一时间间隔中观察到的每秒设备中断数

  • cs列表示每秒产生的上下文切换次数

上面这两个值越大,会看到内核消耗的CPU时间就越多,这个时候可能要考虑下为何内核的消耗会这么大,有可能有瓶颈存在。

CPU

  • us列 显示了用户进程消耗CPU的时间百分比。us的值比较高时,说明用户进程消耗的CPU时间多,如果长期大于50%,需要考虑优化程序啥的。

  • sy列显示了内核进程消耗CPU的时间百分比。sy的值比较高时,就说明内核消耗的CPU时间多;如果us+sy超过80%,就说明CPU的资源存在不足。

  • id列 显示了CPU处在空闲状态的时间百分比

  • wa列 显示IO等待所占的CPU时间百分比。wa值越高,说明IO等待越严重。如果wa值超过20%,说明IO等待严重

  • st列 虚拟机占用的时间百分比。

sar

sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘I/O、CPU效率、内存使用状况、进程活动及IPC有关的活动等。

如果你的系统没安装该命令,请用以下方式进行安装

apt-get install sysstat
yum install sysstat

安装完成后在用以下命令启用:

vi /etc/default/sysstat

将ENABLED改为“true”

ENABLED="true"

重启下sar服务,开始采集相关数据

/etc/init.d/sysstat start
  • 命令常用格式

sar [options] [-A] [-o file] t [n]

其中:

t为采样间隔,n为采样次数,默认值是1;

-o file表示将命令结果以二进制格式存放在文件中,file 是文件名。

options 为命令行选项,sar命令常用选项如下:

  • sar参数说明

-A 查看汇总所有的报告-a 查看文件读写使用情况-B 查看附加的缓存的使用情况-b 查看缓存的使用情况-c 查看系统调用的使用情况-d 查看磁盘的使用情况-g 查看串口的使用情况-h 查看关于buffer使用的统计数据-m 查看IPC消息队列和信号量的使用情况-n 查看命名cache的使用情况-p 查看调页活动的使用情况-q 查看运行队列和交换队列的平均长度-R 查看进程的活动情况-r 查看没有使用的内存页面和硬盘块-u 查看CPU的利用率-v 查看进程、文件和锁表状态-w 查看系统交换活动状况-y 查看TTY设备活动状况
  • 查看CPU是否存在瓶颈:

sar -u sar -q
  • 查看内存是否存在瓶颈:

sar -Bsar -rsar -W
  • 查看IO是否存在瓶颈

sar -bsar -usar -d
  • 示例

例如,每10秒采样一次,连续采样3次,观察CPU 的使用情况,并将采样结果以二进制形式存入当前目录下的文件cpu_info中,需键入如下命令:

sar -u -o cpu_info 10 3

iostat

iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

iotop

如果你想知道每个进程是如何使用IO的就比较麻烦。这个时候iotop可以上场了。

iotop 是一个用来监视磁盘 I/O 使用状况的 top 类工具。iotop 具有与 top 相似的 UI,其中包括 PID、用户、I/O、进程等相关信息。

其他命令

mpstat、netstat、pidstat也是常用的,大家看相关手册学习。这里不再进行说明

总结

linux的监控篇就分享这些,vmstat、sar必须掌握,至于top、free等简单命令,是基本的了,肯定是也要掌握的。不管怎么样,对于这些命令还是要多练习,多去把各个命令选项都用用,看看实际的输出,对分析下各个指标间的关系。

 

 

 

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

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

相关文章

Springboot配置文件数据项加密

1 添加依赖 <!-- jasypt-spring-boot-starter --> <dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.2</version> </dependency> 2 加密数…

华为数通HCIA-网络参考模型(TCP/IP)

网络通信模式 作用&#xff1a;指导网络设备的通信&#xff1b; OSI七层模型&#xff1a; 7.应用层&#xff1a;由应用层协议&#xff08;http、FTP、Telnet.&#xff09;为应用程序产生对应的数据&#xff1b; 6.表示层&#xff1a;将应用层产生的数据转换成网络设备看得懂…

CloudDriver一款将各种网盘云盘挂在到电脑本地变成本地磁盘的工具 教程

平时我们的电脑可能由于大量的文件资料之类的导致存储空间可能不够&#xff0c;所以我们可以选择将网盘我们的本地磁盘用来存放东西。 CloudDrive 是一款可以将 115、阿里云盘、天翼云盘、沃家云盘、WebDAV 挂载到电脑中&#xff0c;成为本地硬盘的工具&#xff0c;支持 Window…

Day10-作业(SpringBootWeb案例)

作业1&#xff1a;完成课上预留给大家自己完成的功能 【部门管理的修改功能】 注意&#xff1a; 部门管理的修改功能&#xff0c;需要开发两个接口&#xff1a; 先开发根据ID查询部门信息的接口&#xff0c;该接口用户查询数据并展示 。(一定一定先做这个功能) 再开发根据ID…

543. 二叉树的直径

题目 题解一 遍历每一个节点&#xff0c;以每一个节点为中心点计算最长路径&#xff08;左子树边长右子树边长&#xff09;&#xff0c;更新全局变量max。 class Solution {int maxd0;public int diameterOfBinaryTree(TreeNode root) {depth(root);return maxd;}public int …

苍穹外卖--公共字段自动填充

问题分析 代码冗余&#xff0c;且不便于后期维护。 实现思路 技术点&#xff1a;枚举&#xff0c;注解&#xff0c;AOP&#xff0c;反射 1.自定义注解AutoFill 1.在sky-server.com.sky包下建立annotation&#xff08;注解&#xff09;包 2.在该包下建立注解AutoFill package co…

软件测试员,面试常见的18个问题(记得收藏!)

软件测试面试18个常见问题汇总 Q1&#xff1a;项目中相关需求问题&#xff0c;测试可以直接和客户沟通吗&#xff1f; A1&#xff1a;可以&#xff0c;最初与客户沟通需求时&#xff0c;测试人员直接参与&#xff0c;所以我们可以直接和客户方的代表开会进行沟通。 A2&#xff…

Apipost教程?一篇文章玩转Apipost

你是否经常遇到接口开发过程中的各种问题&#xff1f;或许你曾为接口测试与调试的繁琐流程而烦恼。不要担心&#xff01;今天我将向大家介绍一款功能强大、易于上手的接口测试工具——Apipost&#xff0c;并带你深入了解如何玩转它&#xff0c;轻松实现接口测试与调试。 什么是…

SQL-每日一题【1173. 即时食物配送 I】

题目 配送表: Delivery 如果顾客期望的配送日期和下单日期相同&#xff0c;则该订单称为 「即时订单」&#xff0c;否则称为「计划订单」。 查询即时订单所占的百分比&#xff0c; 保留两位小数。 查询结果如下所示。 示例 1: 解题思路 1.题目要求我们查询出顾客期望的配送日…

大数据开发面试必问:Hive调优技巧系列一

Hive必问调优 Hive 调优拆解:Hive SQL 几乎是每一位互联网分析师的必备技能&#xff0c;相信很多小伙伴都有被面试官问到 Hive 优化问题的经历。所以掌握扎实的 HQL 基础尤为重要&#xff0c;hive优化也是小伙伴应该掌握的一项技能&#xff0c;本篇文章具体从hive建表优化、HQ…

我求求你不要再问我SpringBoot的自动配置原理了!

目录 四、SpringBoot自动配置原理 4.1 起步依赖原理 4.1.1 版本锁定 4.1.2 起步依赖 4.2 自动配置原理 4.2.1 SpringBootApplication源码 4.2.2 SpringBootConfiguration源码 4.2.3 EnableAutoConfiguration源码 1&#xff09;Registrar 2&#xff09;AutoConfigurat…

SQL SERVER使用发布订阅同步数据库遇到的坑

可能遇到的各种坑 1.在执行 xp_cmdshell 的过程中出错。调用 ‘CreateProcess’ 失败&#xff0c;错误代码: ‘5’ 网上有各种解决办法&#xff0c;包括改本地安全策略&#xff0c;将sql server服务的网络权限改为本机系统&#xff0c;改cmd用户的读写权限&#xff0c;退出360…

MIT 6.S081 Lab Eight -- Lock

MIT 6.S081 Lab Eight -- Lock 引言locksMemory allocator(moderate)代码解析 Buffer cache(hard)代码解析 可选的挑战练习 引言 本文为 MIT 6.S081 2020 操作系统 实验八解析。 MIT 6.S081课程前置基础参考: 基于RISC-V搭建操作系统系列 locks 在本实验中&#xff0c;您将获…

备战秋招 | 笔试强训19

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、二分查找的时间复杂度&#xff08;&#xff09; A. O(N*log(N)) B. O(N) C. O(log(N)) D. O(N^2) 2、有一个单向链表中有一个A、B两个相邻元素&#xff0c;有一个指针p指向元素A&#xff0c;现将…

81%的消费者预算增加,今年返校季会有哪些机会?

对于跨境卖家来说&#xff0c;7-9月的重头戏莫过于“返校季”。多项调研表明&#xff0c;今年“返校季”消费者预计投入更多预算&#xff0c;并瞄准线上渠道。目前&#xff0c;亚马逊“返校季”促销活动正在火热进行中&#xff0c;许多产品甚至卖到脱销。 那么&#xff0c;今年…

​LeetCode解法汇总143. 重排链表

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;143. 重排链表 描述&#xff1a; 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#x…

资深测试老鸟,APP性能测试-全覆盖测试点(详细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 android的app性能…

QT控件中,便捷定义信号和槽函数

QT控件中&#xff0c;便捷定义信号和槽函数 之前使用的方式为&#xff1a;自定义信号和槽函数 现在使用一种更方便的方式&#xff1a; 点击控件&#xff0c;直接可以调用槽函数了。。。&#xff08;都不用绑定&#xff09; 把另外两个控件都加上

【MySQL】mysql | linux | 离线安装mysqldump

一、说明 1、项目要求离线安装mysqldump 2、数据库服务已经使用docker进行安装&#xff0c;但是其他项目依赖mysqldump&#xff0c;所以需要在宿主机上安装mysqldum 二、解决方案 1、下载依赖 https://downloads.mysql.com/archives/community/ 2、下载内容 mysql-community-c…

uniapp小程序警告:[sitemap 索引情况提示]

这个并不算是报错&#xff0c;只是一个警告提示&#xff0c;提示开发者哪些页面被微信收录了&#xff08;代表这个页面可以在微信的搜索中被搜到&#xff09;&#xff0c;sitemap 的索引提示是默认开启的&#xff0c;如需要关闭 sitemap 的索引提示&#xff0c;可在小程序项目配…