2022
我们一起努力

linux服务器性能测试(linux服务器性能测试工具)

目录:

  • 1、linux 性能优化-- cpu 切换以及cpu过高
  • 2、【性能】Linux性能测试工具
  • 3、Linux 服务器性能出问题,排查下这些参数指标
  • 4、基于LINUX环境的自动化测试的研究应用
  • 5、如何测试Linux服务器的性能
  • 6、软件测试面试宝典「Linux 数据库 测试工具 自动化 性能测试」

linux 性能优化-- cpu 切换以及cpu过高

本文先介绍了cpu上下文切换的基础知识,以及上下文切换的类型(进程,线程等切换)。然后介绍了如何查看cpu切换次数的工具和指标的解释。同时对日常分析种cpu过高的情况下如何分析和定位的方法做了一定的介绍,使用一个简单的案例进行分析,先用top,pidstat等工具找出占用过高的进程id,然后通过分析到底是用户态cpu过高,还是内核态cpu过高,并用perf 定位到具体的调用函数。(来自极客时间课程学习笔记)

1、多任务竞争CPU,cpu变换任务的时候进行CPU上下文切换(context switch)。CPU执行任务有4种方式:进程、线程、或者硬件通过触发信号导致中断的调用。

2、当切换任务的时候,需要记录任务当前的状态和获取下一任务的信息和地址(指针),这就是上下文的内容。因此,上下文是指某一时间点CPU寄存器(CPU register)和程序计数器(PC)的内容, 广义上还包括内存中进程的虚拟地址映射信息.

3、上下文切换的过程:

4、根据任务的执行形式,相应的下上文切换,有进程上下文切换、线程上下文切换、以及中断上下文切换三类。

5、进程和线程的区别:

进程是资源分配和执行的基本单位;线程是任务调度和运行的基本单位。线程没有资源,进程给指针提供虚拟内存、栈、变量等共享资源,而线程可以共享进程的资源。

6、进程上下文切换:是指从一个进程切换到另一个进程。

(1)进程运行态为内核运行态和进程运行态。内核空间态资源包括内核的堆栈、寄存器等;用户空间态资源包括虚拟内存、栈、变量、正文、数据等

(2)系统调用(软中断)在内核态完成的,需要进行2次CPU上下文切换(用户空间--内核空间--用户空间),不涉及用户态资源,也不会切换进程。

(3)进程是由内核来管理和调度的,进程的切换只能发生在内核态。所以,进程的上下文不仅包括了用户空间的资源,也包括内核空间资源。

(4)进程的上下文切换过程:

(5)、下列将会触发进程上下文切换的场景:

7、线程上下文切换:

8、中断上下文切换

快速响应硬件的事件,中断处理会打断进程的正常调度和执行。同一CPU内,硬件中断优先级高于进程。切换过程类似于系统调用的时候,不涉及到用户运行态资源。但大量的中断上下文切换同样可能引发性能问题。

重点关注信息:

系统的就绪队列过长,也就是正在运行和等待 CPU 的进程数过多,导致了大量的上下文切换,而上下文切换又导致了系统 CPU 的占用率升高。

这个结果中有两列内容是我们的重点关注对象。一个是 cswch ,表示每秒自愿上下文切换(voluntary context switches)的次数,另一个则是 nvcswch ,表示每秒非自愿上下文切换(non voluntary context switches)的次数。

linux的中断使用情况可以从 /proc/interrupts 这个只读文件中读取。/proc 实际上是 Linux 的一个虚拟文件系统,用于内核空间与用户空间之间的通信。/proc/interrupts 就是这种通信机制的一部分,提供了一个只读的中断使用情况。

重调度中断(RES),这个中断类型表示,唤醒空闲状态的 CPU 来调度新的任务运行。这是多处理器系统(SMP)中,调度器用来分散任务到不同 CPU 的机制,通常也被称为处理器间中断(Inter-Processor Interrupts,IPI)。

这个数值其实取决于系统本身的 CPU 性能。如果系统的上下文切换次数比较稳定,那么从数百到一万以内,都应该算是正常的。但当上下文切换次数超过一万次,或者切换次数出现数量级的增长时,就很可能已经出现了性能问题。这时,需要根据上下文切换的类型,再做具体分析。

比方说:

首先通过uptime查看系统负载,然后使用mpstat结合pidstat来初步判断到底是cpu计算量大还是进程争抢过大或者是io过多,接着使用vmstat分析切换次数,以及切换类型,来进一步判断到底是io过多导致问题还是进程争抢激烈导致问题。

CPU 使用率相关的重要指标:

性能分析工具给出的都是间隔一段时间的平均 CPU 使用率,所以要注意间隔时间的设置,特别是用多个工具对比分析时,你一定要保证它们用的是相同的间隔时间。比如,对比一下 top 和 ps 这两个工具报告的 CPU 使用率,默认的结果很可能不一样,因为 top 默认使用 3 秒时间间隔,而 ps 使用的却是进程的整个生命周期。

top 和 ps 是最常用的性能分析工具:

这个输出结果中,第三行 %Cpu 就是系统的 CPU 使用率,top 默认显示的是所有 CPU 的平均值,这个时候你只需要按下数字 1 ,就可以切换到每个 CPU 的使用率了。继续往下看,空白行之后是进程的实时信息,每个进程都有一个 %CPU 列,表示进程的 CPU 使用率。它是用户态和内核态 CPU 使用率的总和,包括进程用户空间使用的 CPU、通过系统调用执行的内核空间 CPU 、以及在就绪队列等待运行的 CPU。在虚拟化环境中,它还包括了运行虚拟机占用的 CPU。

预先安装 stress 和 sysstat 包,如 apt install stress sysstat。

stress 是一个 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。而 sysstat 包含了常用的 Linux 性能工具,用来监控和分析系统的性能。我们的案例会用到这个包的两个命令 mpstat 和 pidstat。

下面的 pidstat 命令,就间隔 1 秒展示了进程的 5 组 CPU 使用率,

包括:

perf 是 Linux 2.6.31 以后内置的性能分析工具。它以性能事件采样为基础,不仅可以分析系统的各种事件和内核性能,还可以用来分析指定应用程序的性能问题。

第一种常见用法是 perf top,类似于 top,它能够实时显示占用 CPU 时钟最多的函数或者指令,因此可以用来查找热点函数,使用界面如下所示:

输出结果中,第一行包含三个数据,分别是采样数(Samples)如2K、事件类型(event)如cpu-clock:pppH和事件总数量(Event count)如:371909314。

第二种常见用法,也就是 perf record 和 perf report。 perf top 虽然实时展示了系统的性能信息,但它的缺点是并不保存数据,也就无法用于离线或者后续的分析。而 perf record 则提供了保存数据的功能,保存后的数据,需要你用 perf report 解析展示。

1.启动docker 运行进程:

2.ab工具测试服务器性能

ab(apache bench)是一个常用的 HTTP 服务性能测试工具,这里用来模拟 Ngnix 的客户端。

3.分析过程

CPU 使用率是最直观和最常用的系统性能指标,在排查性能问题时,通常会关注的第一个指标。所以更要熟悉它的含义,尤其要弄清楚:

这几种不同 CPU 的使用率。比如说:

碰到 CPU 使用率升高的问题,你可以借助 top、pidstat 等工具,确认引发 CPU 性能问题的来源;再使用 perf 等工具,排查出引起性能问题的具体函数.

【性能】Linux性能测试工具

# yum -y install stress

# yum info stress

Linux stress 命令

Linux 压力测试软件 stress 使用指南

stress命令

官方网址:

# yum -y install sysstat

# yum info sysstat

系统性能监控神器sysstat

Linux系统维护监控工具集sysstat详解

watch命令 : 周期性执行命令

CPU个数、CPU核心数、CPU线程数

CPU的线程数概念仅仅只针对Intel的CPU才有用,因为它是通过Intel超线程技术来实现的,最早应用在Pentium4上。

如果没有超线程技术,一个CPU核心对应一个线程。所以,对于AMD的CPU来说,只有核心数的概念,没有线程数的概念。 

现在大多数CPU有超线程能力,在计算和评估平均负载的时 候,CPU的核数指的是逻辑核数。

#  yum  -y  install  dstat 

# yum info dstat

全能系统监控工具dstat

在计算机中,系统调用(英语:system call),又称为系统呼叫, 指运行在用户空间的程序向操作系统内核请求需要更高权限运行的服务。

Linux 服务器性能出问题,排查下这些参数指标

1.1 top

1.2 vmstat

r 表示可运行进程数目,数据大致相符;而b表示的是 uninterruptible 睡眠的进程数目;swpd 表示使用到的虚拟内存数量,跟 top-Swap-used 的数值是一个含义,而如手册所说,通常情况下 buffers 数目要比 cached Mem 小的多,buffers 一般20M这么个数量级;io 域的 bi、bo 表明每秒钟向磁盘接收和发送的块数目(blocks/s);system 域的 in 表明每秒钟的系统中断数(包括时钟中断),cs表明因为进程切换导致上下文切换的数目。

说到这里,想到以前很多人纠结编译 linux kernel 的时候 -j 参数究竟是 CPU Core 还是 CPU Core+1?通过上面修改 -j 参数值编译 boost 和 linux kernel 的同时开启 vmstat 监控,发现两种情况下 context switch 基本没有变化,且也只有显著增加 -j 值后 context switch 才会有显著的增加,看来不必过于纠结这个参数了,虽然具体编译时间长度我还没有测试。资料说如果不是在系统启动或者 benchmark 的状态,参数 context switch100000 程序肯定有问题。

1.3 pidstat

如果想对某个进程进行全面具体的追踪,没有什么比 pidstat 更合适的了——栈空间、缺页情况、主被动切换等信息尽收眼底。这个命令最有用的参数是-t,可以将进程中各个线程的详细信息罗列出来。

-r: 显示缺页错误和内存使用状况,缺页错误是程序需要访问映射在虚拟内存空间中但是还尚未被加载到物理内存中的一个分页,缺页错误两个主要类型是

-s:栈使用状况,包括 StkSize 为线程保留的栈空间,以及 StkRef 实际使用的栈空间。使用ulimit -s发现CentOS 6.x上面默认栈空间是10240K,而 CentOS 7.x、Ubuntu系列默认栈空间大小为8196K

1.4 其他

while :; do ps -eo user,pid,ni,pri,pcpu,psr,comm | grep 'ailawd'; sleep 1; done

2.1 iostat

3.1 netstat

➜ ~ netstat -antp #列出所有TCP的连接

➜ ~ netstat -nltp #列出本地所有TCP侦听套接字,不要加-a参数

3.2 sar

3.3 tcpdump

基于LINUX环境的自动化测试的研究应用

(一)各种技术应用的前提。对于在开源社区和一些开源项目中获得的测试工具,首先需要了解工具适用于哪些类型应用的测试,以及工具发布后的发布说明和FAQ。开源的工具通常不像商业工具那样成熟稳定,因此找出工具的适用范围以及探索工具的实现程度是进行自动化测试应用的前提。

(二)各种技术应用的环境需求。对于各类工具,需要关注编译和运行时对各种包和库及其版本的依赖关系以及对预先安装的应用的依赖关系。这些在用户手册中都有详尽的说明。

(三)服务器性能监视器。大部分测试工具没有提供服务器端的性能监控功能,测试工程师需要根据实际的需求编写性能监控脚本来配合工具的使用。

下面结合曾经参与进行过的Linux平台下的自动化测试的研究,面向不同类别的测试用例自动化的需求,将主要从功能测试,如GUI测试、命令行客户端的测试,以及性能测试等几个方面对Linux平台下的测试工作的自动化进行分析和说明。

GZW自动化洲试

对于GUI测试的自动化,通常的测试工具所使用的捕捉/回放技术有两种,一种是通过记录界面的鼠标事件(如点击、移动)和键盘事件来完成录制和回放,另外一种则是录制和回放都是基于控件的识别和操作进行的,每个脚本的执行都是控件对象的属性改变或事件触发。我们从开源社区可以获得如上两种类型的运行于Linux平台之上的典型测试工具,如Knee和LDTP等。

(一)Xnee工具

在Linux操作系统的xll环境下,Xnee能够录制、回放和分发用户的动作。Xnee的捕捉/回放技术是记录鼠标事件和键盘事件。进入录制模式时,Xnee记录发送至和来自X server之间的协议数据拷贝,并生成Xneesession文件。在回放模式下,Xnee读取Xnee Session中的事件,模仿整个录制过程(即用户操作过程)完成和x server之间的通讯,被录制的应用软件(Xclient)则接收来自xserver的消息,完成预设的动作。

(二)LDTP测试工具/框架

Linux Desktop Testing Project(LDTP)测试工具/框架能够基于用户在应用界面的选择进行脚本的录制。LDTPI具使用了Gnome环境下的Accessibility库即辅助选项库(at-spi)。使用辅助选项能够获得应用通过AT-SPI协议提供的关于用户界面的信息和界面控件的当前状态或者属性。LDTPI具/框架的体系结构如下:

AT-SPI的基础思想就是为用户界面的可视化元素提供对应的辅助对象,而录制完成的每个脚本的执行都是基于这些辅助对象进行的。对于希望利用LDTPI具进行测试的应用,需要激活辅助选项。

(三)GUI自动化测试工具的应用

在实际的GUI自动化测试中,LDTPI具应用的场景会更广泛一些。LDTPI具可以识别窗口中的对象(如按钮),测试脚本使用LDTP的API接口,每个API接口对UI对象进行操作存在两个最基本的入口,即窗口和对象,窗口通过窗口的类型和名称(即标题)识别,对象通过希望操作的控件的类型和名称(标签或者关联的标签)识别。我们同样可以通过at-pokel具展现激活了辅助选项的应用程序窗口的对象及对象属性。在测试Linux桌面产品和服务器产品的过程中,使用LDTPI具可以测试任何启用辅助选项的Gnome应用,如Mozilla,OpenOffice.org、Evolution邮件客户端,Nautilus文件浏览器等等,此外还可以测试UI界面基于Swing的Java应用,以及KDE4.O上基于QT4.0的应用等等。

而Xneel具所针对的应用程序类型就没有特别的限制,对于一些简单的窗口验证测试和界面的稳定性测试等则比较有效。Xnee相对于基于控件方式捕获和回放的工具而言,不用担心存在控件不能被识别的问题。

从使用的情况来看,各个工具也都因为实现技术而存在一定的缺陷,如两个工具均不能插入验证点,从而不能实现用例级别的结果验证;LDTP对于界面的个别元素捕获不到以及不能对不支持辅助选项的应用进行测试等等;而Xneel具生成的脚本可编辑性差,同时由于录制生成的脚本中的事件和屏幕坐标相关,因此当出现窗口弹出位置发生变化等问题时,就需要考虑回放时应该如何来处理这些变化。

如何测试Linux服务器的性能

################### cpu性能查看 ############################################################

1、查看物理cpu个数:

cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l

2、查看每个物理cpu中的core个数:

cat /proc/cpuinfo |grep "cpu cores"|wc -l

3、逻辑cpu的个数:

cat /proc/cpuinfo |grep "processor"|wc -l

物理cpu个数*核数=逻辑cpu个数(不支持超线程技术的情况下)

########################### 内存查看 ################################################################

1、查看内存使用情况:

free -m

total used free shared buffers cached

Mem: 3949 2519 1430 0 189 1619

-/+ buffers/cache: 710 3239

Swap: 3576 0 3576

total:内存总数

used:已经使用的内存数

free:空闲内存数

shared:多个进程共享的内存总额

- buffers/cache:(已用)的内存数,即used-buffers-cached

+ buffers/cache:(可用)的内存数,即free+buffers+cached

Buffer Cache用于针对磁盘块的读写;Page Cache用于针对文件inode的读写,这些Cache能有效地缩短I/O系统调用的时间。

对于操作系统来说free/used是系统可用/占用的内存;而对于应用程序来说-/+ buffers/cache是可用/占用内存,因为buffers/cache很快就会被使用。我们工作时候应该从应用角度来看。

################# 硬盘查看 ##########################################################################

1、查看硬盘及分区信息:

fdisk -l

2、查看文件系统的磁盘空间占用情况:

df -h

3、查看硬盘的I/O性能(每隔一秒显示一次,显示5次):

iostat -x 1 5

iostat是含在套装systat中的,可以用yum -y install systat来安装。

常关注的参数:

如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。

如果idle小于70%,I/O的压力就比较大了,说明读取进程中有较多的wait。

4、查看linux系统中某目录的大小:

du -sh /root

如发现某个分区空间接近用完,可以进入该分区的挂载点,用以下命令找出占用空间最多的文件或目录,然后按照从大到小的顺序,找出系统中占用最多空间的前10个文件或目录:

du -cksh *|sort -rn|head -n 10

############################################ 查看平均负载 ####################################

有时候系统响应很慢,但又找不到原因,这时就要查看平均负载了,看它是否有大量的进程在排队等待。

最简单的命令:

uptime

查看过去的1分钟、5分钟和15分钟内进程队列中的平均进程数量。

还有动态命令:

top

我们只关心以下部分:

top - 21:33:09 up 1:00, 1 user, load average: 0.00, 0.01, 0.05

如果每个逻辑cpu当前的活动进程不大于3,则系统性能良好;

如果每个逻辑cpu当前的活动进程不大于4,表示可以接受;

如果每个逻辑cpu当前的活动进程大于5,则系统性能问题严重。

一般计算方法:负载值/逻辑cpu个数

还可以结合vmstat命令来判断系统是否繁忙,其中:

procs

r:等待运行的进程数。

b:处在非中断睡眠状态的进程数。

w:被交换出去的可运行的进程数。

memeory

swpd:虚拟内存使用情况,单位为KB。

free:空闲的内存,单位为KB。

buff:被用来作为缓存的内存数,单位为KB。

swap

si:从磁盘交换到内存的交换页数量,单位为KB。

so:从内存交换到磁盘的交换页数量,单位为KB。

io

bi:发送到块设备的块数,单位为KB。

bo:从块设备接受的块数,单位为KB。

system

in:每秒的中断数,包括时钟中断。

cs:每秒的环境切换次数。

cpu

按cpu的总使用百分比来显示。

us:cpu使用时间。

sy:cpu系统使用时间。

id:闲置时间。

标准情况下r和b的值应该为:

r5,b=0

假设输出的信息中:

如果r经常大于3或4,且id经常少于50,表示cpu的负荷过重。

pi、po长期不等于0,表示内存不足。

bi经常不等于0,且在b中的队列大于2或3,表示io的性能不好。

################################# 其他参数 #####################################

查看内核版本号:

uname -a

简化命令:

uname -r

查看系统是32位还是64位的:

file /**in/init

查看发行版:

cat /etc/issue

或l**_release -a

查看系统已载入的相关模块:

l**od

查看pci设置:

lspci

软件测试面试宝典「Linux 数据库 测试工具 自动化 性能测试」

1.介绍一下测试流程(重点,常见!)

2.介绍一下测试方法

3.介绍一下测试用例设计方法(用例设计方法测试方法需要分清楚)

4.设计一个登录页面的用例(提供某个场景的设计用例,重点!)

5.举例说明项目推进的能力(针对个人评价的举例说明)

6.考试中遇到的比较难的一个项目是?(掌握自己简历上的项目)

7.印象深刻的一个bug?

8.你们公司是不是敏捷开发?介绍一下敏捷开发?

9.复盘会议的主要内容有哪些?

10.App 的兼容性怎么测,App 的接口测试怎么测?

11.Web 端测试和 App 端测试有何不同(常见)

1. 工作中常使用的 SQL 语法有哪些?

2.数据库存储过程

3.SQL 常见查询语句编写(此处仅举例常见的查询语句,如有更多坑,希望补充)

a.查询所有学生的数学成绩,显示学生姓名 name, 分数, 由高到低。

b.统计每个学生的总成绩(由于学生可能有重复名字),显示字段:学生 id,姓名,总成绩。

c.列出各门课程成绩最好的学生, 要求显示字段: 学号,姓名,科目,成绩

4.慢查询是什么意思?

5.导致数据库性能差的可能原因有哪些?

6.Redis 缓存应用场景

7.怎么定位 Redis 缓存失效问题(缓存坏了)

1. 工作中常用的 Linux 命令有哪些?

2.什么命令可以帮助 Linux 执行 Windows 上传的脚本?

3简述 Linux 三剑客

4.如何通命令定位 Linux 服务器下的日志?

5.简述项目中的环境搭建和维护

1. 自动化代码中,用到了哪些设计模式?

2. 什么是断言?

3. UI 自动化测试中,如何做集群?

4. 怎么对含有验证码的功能进行自动化测试?

5. 如何优化和提高 Selenium 脚本的执行速度?

6. 接口测试能发现哪些问题?

7. Selenium 中隐藏元素如何定位?

8. 如何判断一个页面上元素是否存在?

9. 如何提高脚本的稳定性?

10. 如何定位动态元素?

11. 如何通过子元素定位父元素

12. 平常遇到过哪些问题? ?如何解决的

13. 一个元素明明定位到了,点击无效(也没报错),如果解决?

14. 测试的数据你放在哪?

15. 什么是数据驱动,如何参数化?

16. 其他接口都需要登录接口的信息,怎么去让这个登录的接口只在其他接口调用一次?

17. 接口产生的垃圾数据如何清理?

18. 怎么用接口案例去覆盖业务逻辑?

1. 性能测试指标包括哪些

2. 如果一个需求没有明确的性能指标,要如何开始进行性能测试?

3. 介绍 JMeter 聚合报告包括哪些内容?

4. 如果有一个页面特别卡顿,设想一下可能的原因?

5. 说一说项目中的实际测试内容

6. 介绍一下 JMeter 进行性能测试的过程

7. 介绍一下 JMeter 和 LoadRunner 的区别

全套【软件测试/自动化测试】海量资料免费领取

赞(0)
文章名称:《linux服务器性能测试(linux服务器性能测试工具)》
文章链接:https://www.fzvps.com/263483.html
本站文章来源于互联网,如有侵权,请联系管理删除,本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
图片版权归属各自创作者所有,图片水印出于防止被无耻之徒盗取劳动成果的目的。

评论 抢沙发

评论前必须登录!