当前位置: 首页 > 科技观察

学习性能优化,如何模拟各种故障场景?

时间:2023-03-15 20:43:49 科技观察

大家好,我是树哥!性能优化这个话题是每一个想成为架构师的小伙伴都必须学习的知识。在学习性能优化的过程中,我们需要学习各种Linux命令和工具来检测服务器的CPU、内存等资源。很多时候我们的CPU和内存资源都非常稳定,不利于我们学习这些性能检测命令。今天给大家介绍一款Linux系统压力测试工具stress,可以模拟系统的各种高负载场景,方便我们学习性能优化!什么是压力?stress是一款Linux系统压力测试工具,主要用于模拟系统高负载场景。可以对CPU、内存、IO、磁盘进行压力测试。安装指南在CentOS8系统中安装stress,可以使用rpm来安装。您只需要执行以下命令即可成功完成安装。//获取安装包wgethttps://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/s/stress-1.0.4-16.el7.x86_64.rpm//安装压力工具rpm-ivhstress-1.0.4-16.el7.x86_64.rpm安装完成后,可以运行stress--version查看安装的版本。[root@iZwz92ezhi90syoqbgjgn1Z~]#stress--versionstress1.0.4如果能正常运行,说明stress安装成功。使用指南stress命令的使用非常简单,就是stress命令加上各种参数。这里我举几个例子简单介绍一下stress命令的几种常用使用方法。模拟CPU消耗运行以下命令创建4个CPU消耗进程,持续600秒。stress-c4--timeout600然后我们使用watch-duptime命令持续监控系统的平均负载。21:55:10up7min,2users,loadaverage:4.63,1.32,0.3421:56:16up8min,2users,loadaverage:6.63,2.32,0.84随着时间的推移,系统的loadaverage越来越高,这意味着我们的压力命令正在起作用。模拟内存消耗,运行如下命令创建2个内存消耗进程,每个进程占用200M内存。stress-m2--vm-bytes200M然后我们使用pidstat-r|grepstress命令来检查内存使用情况。[root@iZwz92ezhi90syoqbgjgn1Z~]#pidstat-r|grepstress//-r表示查看内存使用//VSZ表示虚拟地址大小,虚拟内存使用KB22:00:18UIDPIDminflt/smajflt/sVSZRSS%MEMCommand22:00:18016451249.670.00212780223680.29stress22:00:18016461267.040.00212780799281.04stress可以看到VSZ列的值为212780MB,刚好200左右当前目录。临时文件的默认大小为1G。stress-d2然后我们用pidstat监控磁盘,可以看到kB_wr/s这一列的值很大,说明两个stress进程都在做大量的写操作。[root@iZwz92ezhi90syoqbgjgn1Z~]#pidstat-d|grepstress22:07:41UIDPIDkB_rd/skB_wr/skB_ccwr/siodelayCommand22:07:41017300.0015369.4413980.27849stress22:07:41017310.0015941.8613876.48976运行大量压力I模拟操作以下命令模拟4个进程执行大量sync()操作。stress-i4--timeout600使用top查看stress的4个进程占用CPU资源较多。PID用户prnivirtres%cpu%memtime+命令1863根2007976960r100.00:12.75压力1864根2007976960r100.00:12.78079769696969696960.007976960R99.70.00:12.77使用pidstat查看压力的过程。正常情况下,可以看到stress的4个进程产生了大量的%wait时间。但是,由于我测试的服务器使用SSD磁盘,因此不会产生大量的CPU等待时间。[root@iZwz92ezhi90syoqbgjgn1Z~]#pidstat-u51Linux4.18.0-348.7.1.el8_5.x86_64(iZwz92ezhi90syoqbgjgn1Z)22/08/22_x86_64_(4CPU)22:22:41UIDPID%WAITest%usr%CPUCPUCPUCommand22:22:46018620.2099.600.000.2099.801Stress22:22:46018630.2099.800.00100.000Stress22:22:460.209.600.000.2099.802stress18650.2099.800.000.00100.003stress要获取stress工具的更多用法,直接输入stress--help获取详细信息,如下图。-c,--cpuN生成N个进程,每个进程重复计算随机数的平方根-i,--ioN生成N个进程,每个进程重复调用sync()将内容存入硬盘-m,--vmN生成N个进程,每个进程不断分配和释放内存--vm-bytesB指定分配内存的大小--vm-strideB对部分内存连续赋值,让COW(CopyOnWrite)发生--vm-hangN指示每个耗内存进程在分配内存后进入休眠N秒,然后释放内存,重复这个过程--vm-keep一直占用内存,区别为连续releaseandreallocation(默认是不断释放和重新分配内存)-d,--haddN生成N个进程,不断执行write和unlink函数(创建文件,写入内容,删除文件)--hadd-bytesB指定文件size-t,--timeoutNN秒后结束程序--backoffN等待N微秒开始运行-q,--quiet程序在运行过程中不输出信息-n,--dry-run输出程序将做什么,而不实际执行相关操作--version显示版本号-v,--verbose显示详细信息汇总本文介绍一款常用的压力测试工具stress,它可以模拟CPU、内存、磁盘、IO等操作,方便我们学习性能优化命令。最后给出压力工具的参数设置图。可以保存下来,以后使用的时候可以参考。