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

如何对您的Linux系统进行压力测试

时间:2023-03-16 13:57:34 科技观察

如果您想了解Linux服务器在压力下的表现,那么对它进行压力测试是个好主意。在本文中,我们将了解一些可以帮助您增加服务器压力并衡量结果的工具。你为什么要强调你的Linux系统?因为有时您可能想知道系统在由于大量运行的进程、繁重的网络流量、过多的内存使用等而承受很大压力时的行为如何。这种压力测试可以帮助确保系统已准备好“上市””如果您需要预测您的应用程序可能需要多长时间才能做出反应,以及哪些(如果有)进程可能会在重负载下失败或运行缓慢,那么预先进行压力测试是一个很好的主意。幸运的是,对于那些需要能够预测您的Linux系统在压力下会如何反应的人来说,您可以使用一些有用的技术和工具来简化这个过程。在本文中,我们将研究其中的一些。自己动手做循环第一种技术是在命令行上运行一些循环并观察它们对系统的影响。这种做法会大大增加CPU负载。使用uptime或类似的命令可以很容易地看到结果。在下面的命令中,我们开始了四个无限循环。您可以通过添加数字或使用bash表达式(如{1...6}而不是1234)来增加循环次数:foriin1234;做的时候:;做:;done&doneinthecommand敲完一行后,后台开始四个死循环:$foriin1234;做的时候:;做:;done&done[1]205012[2]205013[3]205014[4]205015in在这种情况下,作业1-4被启动,作业ID和进程ID会相应显示。要观察对平均负载的影响,请使用如下所示的命令。在此示例中,uptime命令每30秒运行一次:$whiletrue;正常运行时间;睡30;done如果您计划定期运行这样的测试,您可以将loop命令放入脚本watch-it中。#!/bin/bashwhiletruedouptimesleep30done在输出中,您可以看到平均负载如何增加,然后在循环结束后再次开始减少。11:25:345天,17:27,2个用户,平均负载:0.15、0.14、0.0811:26:045天,17:27,2个用户,平均负载:0.09、0.12、0.0811:26:345天,17:28,2个用户,平均负载:1.42、0.43、0.1811:27:045天,17:28,2个用户,平均负载:2.50、0.79、0.3111:27:34最多5天,17:29,2个用户,平均负载:3.09、1.10、0.4311:28:04最多5天,17:29,2个用户,平均负载:3.45、1.38、0.5411:28:34最多5天,17:30,2个用户,平均负载:3.67、1.63、0.6611:29:045天,17:30,2个用户,平均负载:3.80、1.86、0.7611:29:345天,17:31,2个用户,平均负载:3.88,2.06,0.8711:30:04上升5天,17:31,2个用户,平均负载:3.93,2.25,0.9711:30:34上升5天,17:32,2个用户,平均负载:3.64、2.35、1.04<==循环停止11:31:045天,17:32,2个用户,平均负载:2.20、2.13、1.0111:31:345天days,17:33,2users,loadaverage:1.40,1.94,0.98因为显示的负载代表1、5、15分钟的平均值,所以这些值需要一段时间才能恢复到系统接近正常状态要停止循环,发出如下所示的kill命令——假设作业编号为1-4,如本文前面所示。如果不确定,可以使用jobs命令来确认作业号。$kill%1%2%3%4增加压力的专用工具另一种方法是使用旨在为您对系统施加压力的工具。其中之一称为压力,它可以以多种方式对系统进行压力测试。压力工具是一个工作负载生成器,可提供CPU、内存和磁盘I/O压力测试。当使用--cpu选项时,stress命令使用平方根函数来强制CPU努力工作。指定的CPU越多,负载上升的速度就越快。下面的第二个脚本(watch-it-2)可用于衡量对系统内存使用的影响。注意这里使用free命令来查看加压效果。$catwatch-it-2#!/bin/bashwhiletruedofreesleep30done启动任务并观察压力:$stress--cpu2$./watch-it13:09:14up5days,19:10,2个用户,平均负载:0.00、0.00、0.0013:09:445天,19:11,2个用户,平均负载:0.68、0.16、0.0513:10:145天,19:11,2个用户,loadaverage:1.20,0.34,0.1213:10:44up5days,19:12,2users,loadaverage:1.52,0.50,0.1813:11:14up5days,19:12,2users,负载average:1.71,0.64,0.2413:11:44up5days,19:13,2users,loadaverage:1.83,0.77,0.30在命令行中指定的CPU越多,负载增加的越快。$stress--cpu4$./watch-it13:47:49up5days,19:49,2users,loadaverage:0.00,0.00,0.0013:48:19up5days,19:49,2用户,平均负载:1.58、0.38、0.1313:48:49最多5天,19:50,2个用户,平均负载:2.61、0.75、0.2613:49:19最多5天,19:50,2个用户,平均负载:3.16、1.06、0.3813:49:49最多5天,19:51,2个用户,平均负载:3.49、1.34、0.5013:50:19最多5天,19:51,2个用户,平均负载:3.69,1.60,0.61stress命令还可以通过--io(输入/输出)和--vm(内存)选项增加I/O和内存负载以对系统施加压力。在以下示例中,运行增加内存压力的命令,然后启动watch-it-2脚本。$stress--vm2$watch-it-2totalusedfreesharedbuff/cacheavailableMem:60870646621602519164886829057405117548Swap:209714802097148totalusedfreesharedbuff/cacheavailableMem:60870648034642377832886429057684976248Swap:209714802097148totalusedfreesharedbuff/cacheavailableMem:60870649685122212772886429057804811200Swap:209714802097148压力的另一个选择是使用--io选项向系统添加输入/输出活动。在这种情况下,您可以使用这样的命令:$stress--io4然后您可以使用iotop来观察有压力的I/O。请注意,运行iotop需要root权限。之前:$sudoiotop-oTotalDISKREAD:0.00B/s|总磁盘写入:19.36K/s当前磁盘读取:0.00B/s|当前磁盘写入:27.10K/sTIDPRIOUSERDISKREADDISKWRITESWAPINIO>COMMAND269308be/4root0.00B/s0.00B/s0.00%1.24%[kworker~fficient]283be/3root0.00B/s19.36K/s0.00%0.26%[jbd2/sda1-8]之后:TotalDISKREAD:0.00B/s|总磁盘写入:0.00B/s当前磁盘读取:0.00B/s|当前磁盘写入:0.00B/sTIDPRIOUSERDISKREADDISKWRITESWAPINIO>COMMAND270983be/4shs0.00B/s0.00B/s0.00%51.45%stress--io4270984be/4shs0.00B/s0.00B/s0.00%51.36%应力--io4270985be/4shs0.00B/s0.00B/s0.00%50.95%应力--io4270982be/4shs0.00B/s0.00B/s0.00%50.80%压力--io4269308be/4root0.00B/s0.00B/s0.00%0.09%[kworker~efficient]stress只是为系统增加压力的几个工具之一另一个较新的工具stress-ng将在以后的文章中介绍。总结用于系统压力测试的各种工具可以帮助您预测系统在受到增加的流量和计算需求的现实情况下将如何响应。虽然我们在本文中展示的是创建和测量各种压力的方法,但最终的好处是压力如何帮助确定您的系统或应用程序如何对其做出反应。