Linux 环境下的性能测试——top与stress

news2024/11/27 17:50:58

对于Linux 环境,top命令是使用频繁且信息较全的命令, 它对于所有正在运行的进行和系统负荷提供实时更新的概览信息。stress是个简单且全面的性能测试工具。通过它可以模拟各种高负载情况。

通过topstress这两个命令的结合使用,基本可以达到压力测试的目的。

1. 查看硬件资源

# 查看cpu个数
cat /proc/cpuinfo

# 查看内存大小
cat /proc/meminfo

# 查看当前内存使用情况
free -h

# 查看磁盘大小
df -h

# 查看当前文件夹已用磁盘大小
du -sh ./*

2. 查看资源实时使用率——top命令

执行top命令

请添加图片描述

2.1 第一行

top - 03:13:05 up 7 days, 1:29, 4 users, load average: 0.85,0.67.0.57
  • top: 当前时间
  • up: 机器运行了多长时间
  • users: 当前登录用户数
  • load average: 系统负载,即任务队列的平均长度。三个数值分别为 过去的1分钟、5分钟和15分钟里,有多少进程在等待CPU资源。 如果这几个数字高于了CPU核心数(比如在4核CPU上,如果3个数字之和超过了4,就表示负载较大),则说明系统负载较高,需要优化,否则就表示系统运行稳定。

2.2 第二行

Tasks: 182 total, 1 running, 181 sleeping, 0 stopped, 0 zombie
  • Tasks: 当前有多少进程。
  • running: 正在运行的进程数 。
  • sleeping: 正在休眠的进程数 。
  • stopped: 停止的进程数 。
  • zombie: 僵尸进程数。

2.3 第三行

%Cpu(s):3.6 us, 5.1 sy, 0.0 ni, 91.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
  • us:用户空间占CPU的百分比(像shell程序、各种语言的编译器、各种应用、web服务器和各种桌面应用都算是运行在用户地址空间的进程,这些程序如果不是处于idle状态,那么绝大多数的CPU时间都是运行在用户态)。
  • sy:内核空间占CPU的百分比(所有进程要使用的系统资源都是由Linux内核处理的,对于操作系统的设计来说,消耗在内核态的时间应该是越少越好,在实践中有一类典型的情况会使sy变大,那就是大量的IO操作,因此在调查IO相关的问题时需要着重关注它)。
  • ni:用户进程空间改变过优先级(ni是nice的缩写,可以通过nice值调整进程用户态的优先级,这里显示的ni表示调整过nice值的进程消耗掉的CPU时间,如果系统中没有进程被调整过nice值,那么ni就显示为0)。
  • id:空闲CPU占用率。
  • wa:等待输入输出的CPU时间百分比(和CPU的处理速度相比,磁盘IO操作是非常慢的,有很多这样的操作,比如,CPU在启动一个磁盘读写操作后,需要等待磁盘读写操作的结果。在磁盘读写操作完成前,CPU只能处于空闲状态。Linux系统在计算系统平均负载时会把CPU等待IO操作的时间也计算进去,所以在我们看到系统平均负载过高时,可以通过wa来判断系统的性能瓶颈是不是过多的IO操作造成的)。
  • hi:硬中断占用百分比(硬中断是硬盘、网卡等硬件设备发送给CPU的中断消息,当CPU收到中断消息后需要进行适当的处理,消耗CPU时间)。
  • st:软中断占用百分比(软中断是由程序发出的中断,最终也会执行相应的处理程序,消耗CPU时间)。
  • st:steal time, 系统花了百分之多少等待得到真正的cpu资源 。

2.4 第四行

KiB Mem :7888320 total, 1695796 free, 4378504 used, 1814020 buff/cache
  • total:物理内存总量。
  • free:空闲内存量。
  • used:使用的内存量。
  • buffer/cache:用作内核缓存的内存量。

2.5 第五行

KiB Swap: 8126460 total, 8126460 free, 0 used. 3156100 avail Mem
  • total:交换区内存总量。
  • free:空闲交换区总量。
  • used:使用的交换区总量。
  • buffer/cache:缓冲的交换区总量。

第四第五行分别是内存信息和swap信息,所有程序的运行都是在内存中进行的,所以内存的性能对与服务器来说非常重要。不过当内存的free变少的时候,其实我们并不需要太紧张。真正需要看的是Swap中的used信息。

Swap分区是由硬盘提供的交换区,当物理内存不够用的时候,操作系统才会把暂时不用的数据放到Swap中。所以当这个数值变高的时候,说明内存是真的不够用了。

2.6 进程信息

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  • PID: 进程id
  • USER: 进程所有者的用户名
  • PR:优先级
  • NI: nice值,负值表示高优先级,正值表示低优先级
  • VIRT: 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
  • RES: 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
  • SHR: 共享内存大小,单位kb
  • S: 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
  • %CPU: 上次更新到现在的CPU时间占用百分比
  • %MEM: 进程使用的物理内存百分比
  • TIME+: 进程使用的CPU时间总计,单位1/100秒
  • COMMAND: 命令名/命令行

3. 压力测试工具——stress

3.1 安装

  • 在RHEL/CentOS 系统可以使用 yum install stress

  • 在Debian/Ubuntu系统中,可以使用apt-get install stress

  • 源码离线安装 stress-1.0.4.tar.gz

tar -zxvf stress-1.0.4.tar.gz
cd stress-1.0.4
./configure
make 
make install

3.2 压测命令

帮助命令:stress --help

`stress' imposes certain types of compute stress on your system

Usage: stress [OPTION [ARG]] ...
 -?, --help         show this help statement
     --version      show version statement
     				显示版本号
 -v, --verbose      be verbose
 					显示详细的信息
 -q, --quiet        be quiet
 					程序在运行的过程中不输出信息
 -n, --dry-run      show what would have been done
 					输出程序会做什么而并不实际执行相关的操作
 -t, --timeout N    timeout after N seconds
 					在 N 秒后结束程序
     --backoff N    wait factor of N microseconds before work starts
     				等待N微妙后开始运行
 -c, --cpu N        spawn N workers spinning on sqrt()
 					产生 N 个进程,每个进程都反复不停的计算随机数的平方根
 -i, --io N         spawn N workers spinning on sync()
 					产生 N 个进程,每个进程反复调用 sync() 将内存上的内容写到硬盘上
 -m, --vm N         spawn N workers spinning on malloc()/free()
 					产生 N 个进程,每个进程不断分配和释放内存
     --vm-bytes B   malloc B bytes per vm worker (default is 256MB)
     				指定分配内存的大小
     --vm-stride B  touch a byte every B bytes (default is 4096)
     				不断的给部分内存赋值,让 COW(Copy On Write)发生
     --vm-hang N    sleep N secs before free (default none, 0 is inf)
     				指示每个消耗内存的进程在分配到内存后转入睡眠状态 N 秒,然后释放内存,一直重复执行这个过程
     --vm-keep      redirty memory instead of freeing and reallocating 
     				一直占用内存,区别于不断的释放和重新分配(默认是不断释放并重新分配内存)。
 -d, --hdd N        spawn N workers spinning on write()/unlink()
 					产生 N 个不断执行 write 和 unlink 函数的进程(创建文件,写入内容,删除文件)
     --hdd-bytes B  write B bytes per hdd worker (default is 1GB)
     				指定文件大小

Example: stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s

Note: Numbers may be suffixed with s,m,h,d,y (time) or B,K,M,G (size).

stress常用压测命令

# CPU压力测试
# 启动2个CPU进程
stress -c 2
# 启动2个CPU进程,持续时间为60s
stress -c 2 -t 60

# 内存压测
# 启动2个进程,每个进程分配1G内存,分配后不释放
stress --vm 2 --vm-bytes 1G --vm-keep

# IO压测
# 启动4个进程,将内存上的内容写到硬盘上,top命令可看到sy升高,wa升高
stress -i 4

# 磁盘IO压测
# 创建一个进程不断地在磁盘上创建10M大小的文件并写入内容
stress -d 1 --hdd-bytes 10M

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

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

相关文章

我的隐私计算学习——国密SM2和国密SM4算法

此篇是我笔记目录里的安全保护技术(七),前篇可见: 隐私计算安全保护技术(一):我的隐私计算学习——混淆电路-CSDN博客 隐私计算安全保护技术(二):我的隐私计…

C++学习之路(十九)C++ 用Qt5实现一个工具箱(用SQLite数据库来管理粘贴板数据)- 示例代码拆分讲解

上篇文章,我们用 Qt5 实现了在小工具箱中添加了《点击按钮以新窗口打开功能面板》功能。今天我们把粘贴板功能用SQLite数据库来管理,用SQLite来实现增删改查。下面我们就来看看如何来规划开发这样的小功能并且添加到我们的工具箱中吧。 老规矩&#xff…

30个Python小游戏,小白练手,我都能玩一天【内附源码】

给大家带来30个 Python 小游戏,一定要收藏! 文末获取完整代码 有手就行 1、吃金币 import os import cfg import sys import pygame import random from modules import *游戏初始化 def initGame():# 初始化pygame, 设置展示窗口pygame.init()screen…

全面解析修复msvcr120.dll缺失问题的方法,msvcr120.dll丢失的原因

在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“msvcr120.dll丢失”。这个错误通常会导致某些程序无法正常运行,给用户带来很大的困扰。那么,当我们遇到这个问题时,应该如何修复呢?本文…

忽略python运行出现的大量警告

添加以下代码即可 import warnings warnings.filterwarnings(ignore)

使用rust slint开发桌面应用

安装QT5,过程省略 安装rust,过程省略 创建工程 cargo new slint_demo 在cargo.toml添加依赖 [dependencies] slint "1.1.1" [build-dependencies] slint-build "1.1.1" 创建build.rs fn main() {slint_build::compile(&quo…

DFT(离散傅里叶变换)的通俗理解

本文包含了博主对离散傅里叶变换,负频率,实信号与复信号频谱的理解,如有不妥,欢迎各位批评指正与讨论。 文章目录 DFT的理解信号的频谱实信号的频谱复信号的频谱 DFT的理解 傅里叶变换是一种将信号从时域转换到频域的数学工具。…

使用消息队列遇到的问题—kafka

目录 1 分区2 消费者3 Kafka 如何保证消息的消费顺序?3.1 方案一3.2 方案二 在项目中使用kafka作为消息队列,核心工作是创建生产者—包装数据;创建消费者----包装数据。 欠缺一些思考,特此梳理项目中使用kafka遇到的一些问题和解决…

探索Selenium的规避检测策略

Selenium之规避检测 背景 ​ 目前很多大网站有对selenium采取了监测机制。在正常情况下我们用浏览器访问相关网站的window.navigator.webdriver的值为 undefined或者为false。而使用selenium访问则该值为true。我们如何伪装,防止被检测出来呢? ​ 这是…

【Maven】依赖管理

1. 依赖管理 1.1 依赖配置 依赖:指当前项目运行所需要的jar包。一个项目中可以引入多个依赖。 依赖引入步骤:在pom.xml中编写标签,在标签中使用引入坐标,定义坐标的 groupId、artifactId、version,最后点击刷新&…

FluxMQ—2.0.8版本更新内容

FluxMQ—2.0.8版本更新内容 前言 FLuxMQ是一款基于java开发,支持无限设备连接的云原生分布式物联网接入平台。FluxMQ基于Netty开发,底层采用Reactor3反应堆模型,具备低延迟,高吞吐量,千万、亿级别设备连接&#xff1…

WIN10下解决HIVE 初始化MYSQL表报错:Unknown version specified for initialization

今天本地WINDOWS装HIVE,走到最后一步初始化数据库死活不通过: D:\hive\hive-rel-release-3.1.3\bin\ext>hive --service schematool -dbType mysql -initSchema --verbose SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found bind…

基于JSDoc实现TypeScript类型安全的实践报告

在FEDay 2023中我讲了《从JS到TS无缝迁移的实践报告》【视频在这里在这里】,是将一个传统的JS项目(mochajs/mocha)迁移到TypeScript环境的全程。其中提到了一件事情,就是“可以通过JSDoc/TSDoc来生成.d.ts”,从而实现T…

【C语言:自定义类型(结构体、位段、共用体、枚举)】

文章目录 1.结构体1.1什么是结构体1.2结构体类型声明1.3结构体变量的定义和初始化1.4结构体的访问 2.结构体对齐2.1如何对齐2.2为什么存在内存对齐? 3.结构体实现位段3.1什么是位段3.2位段的内存分配3.3位段的跨平台问题3.4位段的应用3.5位段使用注意事项 4.联合体4…

全国规模最大!玻色量子加入算力并网行动!

8月19日,在2023中国算力大会主论坛上,中国移动携手多个超算中心、智算中心,以及云服务商,共同发起全国规模最大的“百川”算力并网行动,打造算力类型最全、规模最大、覆盖最广的“百川”算力并网平台,加快推…

提高Idea编码速度和插件自用推荐

非常推荐 Easy Javadoc 一款注释生成器,很好使~免费,配合使用腾讯、百度之类的翻译免费额度完全够用了,印象中是50万字符每月。下图是使用快捷键生成的注释(我采用鼠标侧面按键,随手一按很方便) Chinese …

HTTP会话技术---Cookie、Session和Token介绍及它们在JavaWeb中的使用

当涉及到Web应用程序的身份验证和状态管理时,我们通常会使用到Cookie、Session和Token这些会话技术。下面是对它们的介绍,并在JavaWeb中的示例 Cookie(HTTP Cookie) Cookie是一种存储在用户浏览器中的小型文本文件,由…

360公司-2019校招笔试-Windows开发工程师客观题合集解析

360公司-2019校招笔试-Windows开发工程师客观题合集 API无法实现进程间数据的相互传递是PostMessage2.以下代码执行后,it的数据为(异常) std::list<int> temp; std::list<int>::iterator it = temp.begin(); it = --it; 3.API在失败时的返回值跟其他不一样是 …

OSPF浅析

一、预习&#xff1a; 1、优点&#xff1a; 是一种典型的链路状态路由协议&#xff0c;协议号89&#xff0c;把大型网络分隔为多个较小、可管理的单元&#xff1a;Area a.减少LSA泛洪范围&#xff0c;有效地把拓朴变化 控制在区域内&#xff0c;达到网络优化的目的…

混音编曲软件tudio One 6.5.1 保姆级安装教程

根据软件大数据显示De-Esser驯服人声嘶嘶声和其他高频声音&#xff0c;和其他 Studio One 中新的去实体插件一样高效且直观易用&#xff0c;使用“收听”按钮查找有问题的频率&#xff0c;然后使用相关的旋钮和 S-Mon 功能拨入 S-Reduce 量即可。实际上我们可以这样讲工作流和协…