一、性能测试的目的及分类 性能测试的目的: 发现性能瓶颈 性能测试的分类: 具体分类(测试范围) 负载测试:通过逐步加压的方法,达到既定的性能阈值的目标, 阈值的设定应是小于等于某个值,如cpu使用率小于等于80% 压力测试:通过逐步加压的方法,使得系统的某些资源达到饱和,甚至失效的状态,简单点说就是什么条件能把系统压崩溃、 并发测试:在同一时间内,多个虚拟用户访问同一模块、同一功能,通常的测试方法是设置集合点 容量测试:通常是指数据库层面的,目标是获取数据库的最佳容量性能。又称之为容量预估。具体测试方法为在一定的并发用户,不同的数据基础量下,观察数据库的处理能力,即获取数据库的各项性能指标 可靠性测试:又称之稳定性测试或者疲劳测试。是指系统在高压的情况下,长时间运行系统是否稳定,如cpu使用率在80%以上,7*24小时运行,系统是否稳定 异常测试:又称之为失败测试。是指系统架构方面的测试。如在负载均衡架构中,要测试宕机,节点挂掉等系统情况的反应 二、性能测试的工作流程
需求分析(了解项目是做什么的)————性能指标制定————脚本开发————场景设置————监控部署————测试执行(先进性基准测试) 性能分析————性能调优————测试报告 三、常见系统应用分层架构 显示层——————web\android\ios\h5 (view) 逻辑控制层——————Api (controller) 数据存储层——————mysql\mongodb\redis (model) 四、性能测试指标定义 事务:从客户端发起的一个和多个请求(这些请求组成一个完整的操作),到客户端接收到从服务器返回的响应 简单来说就是从客户端发起到服务器响应的一个闭环过程 TPS(Transaction Per Second):每秒钟系统能够处理的事务数(事务数并不等于请求数) 请求响应时间:从客户端发起的一个请求开始,到客户端接收到从服务器返回的响应,整个过程所耗费的时间 事务响应时间:事务可能是由一个或多个请求组成的,事务响应时间,组要针对用户的角度而言,如转账。 并发:没有严格意义上的并发。并发总有先后,无论差距是一毫秒,还是一微秒,总有一个时间差,所以并发讲的是一个时间范围内,比如1秒内 五、 jmeter:是轻量级的,易用且开源,免费
六、jmeter的组成 测试计划————线程组:控制多线程并发 断言:预期结果和实际结果是否一致 定时器: 监听器:监听线程运行情况 后置处理器: 前置处理器 逻辑控制器 sampler 七、jmeter是如何实现多并发的 线程组:负载发生器,用多线程和多进程的方式来模拟用户的使用行为。jmeter是以线程的方式来进行模拟用户的并发访问 逻辑控制器:用来控制测试脚本的逻辑判断,也可以如何控制脚本的运行 配置管理器: 前置处理器∶用于在实际的请求发出之前对即将发出的请求进行特殊处理。例如,用户参数,可以在实际发送请求之前来定义变量可以在后面的实际请求中来进行使用。 定时器︰用于操作与操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手段。类似于LoadRunner里面的“思考时间”。 Sampler:取样器,是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,JMeter原生支持多种不同的Sampler 后置处理器∶(关联概念的应用器)用于对Sampler发出请求后得到的服务器响应进行处理。一般用来提取响应中的特定数据。 数据预判--断言∶断言用于检查测试中得到的相应数据是否符合预期,断言一般用来设置检查点,用以保证性能测试过程中的数据交互是否与预期一致。 监控数据可视化--监听器:这个监听器不是用来监听系统资源的组件。它是用来对测试结果数据进行处理和可视化展示的一系列组件。例如查看结果树、聚合报告。 jmeter小助手--函数助手: 分布式并发三步:1、Master(主压力机)在jmeter.properties中添加remote_ hosts 2、Slave(从压力机)在jmeter.properties中添加server_ port 3、Slave启动jmeter-server 八、Linux服务器的监控性能测试
服务器性能测试范围: 测试目的:发现服务器的性能瓶颈。配置的不同能够承载的最大任务数不同,能够承载的压力也不同。 测试范围及性能指标:CPU、内存、磁盘、网络、版本 测试与生产环境不同怎么办?---通过多次压测来计算性能损耗。 九、进程与线程的定义和区别 定义与区别:进程---是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位 (简单点来说就是可以独立运行的程序) 线程---是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能够独立运行的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源,一个进程可以撤销和拥有另一个线程 一个线程只能属于一个进程,一个进程可以拥有多个线程 线程是进程工作的最小单位 一个进程会分配一个地址空间,进程与进程之间不共享地址空间。既不共享内存。 同一个进程下的不同线程会共享父进程的地址空间 十、进程与线程的优缺点
进程的优点:每个进程互相独立,不影响主程序的稳定性,子进程崩溃不影响其它线程 通过增加CPU,就可以扩充性能 可以尽量减少线程加锁与解锁的影响,极大提高了性能 进程的缺点:逻辑控制复杂,需要和主程序交互 多进程调度开销大 线程的优点:程序的逻辑和控制方式比较简单 所有线程可以直接共享内存和变量 线程方式消耗的总资源比进程消耗方式少 线程的缺点:每个线程与主程序共用地址空间,最大内存地址受限 线程之间的同步和加锁不易控制 一个线程的崩溃可能影响整个程序的稳定性 十一、实时监控——内存 man 帮助命令 一、top top -h:帮助命令 -p:监控指定的进程。当监控多个进程时,进程ID以逗号分隔。这个选项只能在命令行下使用 top任务区命令(进入top后操作的命令): M:按内存使用率排序 P:按CPU使用率排序 Z:彩色/黑白显示 top:load avgerage---系统的运行队列的平均利用率,也可以认为是可运行进程的平均数。三个值分别表示在最后的1分钟、5分钟、15分钟的平均负载 top的说明:在单核CPU中load average的值为1时表示满负荷状态。同理在多核cpu中满负荷的load average的值为1*CPU核数 二、vmstat vmstat:可以监控操作系统的进程状态、内存、虚拟内存、磁盘IO、CPU的信息。语法:vmstat [-a] [-n] [-S unit] [delay [count]] -S:使用指定单位显示。参数有k、K .m.M,分别代表1000、1024、1000000、1048576字节( byte )。默认单位为K ( 1024 bytes ) vmstat 时间间隔 显示次数
字段说明:
Procs(进程):
r: 运行队列中进程数量
b: 等待IO的进程数量
Memory(内存):
swpd: 使用虚拟内存大小
free: 可用内存大小
buff: 用作缓冲的内存大小
cache: 用作缓存的内存大小
Swap:
si: 每秒从交换区写到内存的大小
so: 每秒写入交换区的内存大小
IO:(现在的Linux版本块的大小为1024bytes)
bi: 每秒读取的块数
bo: 每秒写入的块数
系统:
in: 每秒中断数,包括时钟中断。【interrupt】
cs: 每秒上下文切换数。 【count/second】
CPU(以百分比表示):
us: 用户进程执行时间(user time)
sy: 系统进程执行时间(system time)
id: 空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。
wa: 等待IO时间
备注:
如果r经常大于4,id经常少于40,表示cpu的负荷很重。
如果bi,bo长期不等于0,表示内存不足。
如果disk经常不等于0,且在b中的队列大于3,表示io性能不好。
Linux在具有高稳定性、可靠性的同时,具有很好的可伸缩性和扩展性,能够针对不同的应用和硬件环境调整,优化出满足当前应用需要的最佳性能。因此企业在维护Linux系统、进行系统调优时,了解系统性能分析工具是至关重要的。
显示活跃和非活跃内存
vmstat -a 2 5 【-a 显示活跃和非活跃内存,所显示的内容除增加inact和active】
三、free free:能够监控系统的内存使用状态。其中,total:总计物理内存的大小; Used:已使用多大; Free:可用有多少; shared:多个进程共享的内存总额; buffers/cached:磁盘缓存的大小。 十二、实时监控——CPU mpstat:最大的特点是,可以查看多核心CPU中每个计算核心的统计数据 -p:表示监控那个CPU,cpu在[0,cpu个数-1]中取值 internal:相邻的两次采样的间隔时间 count采样的次数,count只能和delay一起使用。 需要注意点:当没有参数时,mpstat则显示系统启动的以后所有信息的平均值。 有interval时,第一行信息自启动以来第一行的平均信息,从第二行开始输出信息为前一个intervsl时间段的平均信息 usr:用户使用的 sys:系统使用的 idle:系统空闲的 十三、实时监控——网络 netstat:用于显示本机网络链接、运行端口、路由表等信息 -n:拒绝显示别名,能显示数字的全部转换成数字 -l:仅列出有listen(监听)的服务状态 -p:显示建立相关链接的程序名 -t(tcp):显示tcp相关的选项 -u(udp):仅显示udp的选项 -i:显示自动匹配接口的信息 -c:每个一个固定时间,执行该netstat命令 常用:netstat -ntlp(查看端口是否在运行状态) Recv-Q、Send-Q:接受、发送长度 Pid/Program name:id/程序名 netstat -i(看网络传输的大小,以及传输有没有错误) iface:网络设备的接口名称 MTU:(Maximum Trasmission Unit,最大传输单元) Met (Metric,度量值)。(供某些操作系统用,用于计算一条路由的成本) RX-Ok:接收时,正确的数据包数。 RX-ERR:接收时,产生错误的数据包数。 RX-DRP:接收时,丢弃的数据包数。 RX-OVR:接收时,由于过速(在数据传输中,由于接收设备不能接收按照发送速率传送来的数据而使数据丢失)而丢失的数据包数。 TX-OK:发送时,正确的数据包数。 TX-ERR:发送时,产生错误的数据包数。 TX-DRP:发送时,丢弃的数据包数。 TX-OVR:发送时,由于过速而丢失的数据包数。 Flg标志。 B 已经设置了一个广播地址。 L 该接口是一个回送设备。 M 接收所有数据包(混乱模式)。 N 避免跟踪。 O 在该接口上,禁用ARP。 P 这是一个点到点链接。 R 接口正在运行。 U 接口处于“活动”状态。 十四、实时监控——磁盘 iostat:对系统磁盘IO操作进行监控,它的输出主要显示磁盘的读写操作的统计信息。同时给出CPU的使用情况 -x device 输出指定要统计的磁盘设备名,默认为所有设配磁盘 tps:该设备每秒的传输次数
参数: kB_read/s:每秒从设备(drive expressed)读取的数据量;
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
kB_read: 读取的总数据量;
kB_wrtn:写入的总数量数据量;
iostat -x : rrqm/s: 每秒进行 merge 的读操作数目.即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目.即 delta(wmerge)/s
%util: 一秒中有百分之多少的时间用于 I/O 如果%util接近100%,说明产生的I/O请求太多,I/O系统已经满负荷
idle小于70% IO压力就较大了,一般读取速度有较多的wait。
十五、万能命令 sar: (System Activity Reporter系统活动情况报告)是目前Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告
sar语法说明:在命令行中,n和t两个参数组合起来定义采样间隔和次数, t为采样间隔,是必须有的参数,n为采样次数,是可选的,默认值是1, -o fire表示将命令结果以二进制格式存放在文件中,fire在此处不是关键字,是文件名,options为命令行选项 选项:-A:所有报告的总和 -u:CPU利用率 -v:进程、文件和锁表的状态 -r:显示系统内存的使用情况 -B:内存分页情况 -b(buff区):缓冲区使用情况 十六、Linux下的进程追踪命令 strace命令是一个集诊断、调试、统计与一体的工具,我们可以使用strace 对应用的系统调用和信号传递的跟踪结果来对应用进行分析,以达到解决问题或者是了解应用工作过程的目的 strace选项: -P:跟踪指定进程 -f:跟踪由fork子进程系统调用 -c:统计每一系统调用所执行的时间,次数和出错的次数 -t:在输出中的每一行前加上时间信息。 -tt:时间确定到微秒级 -e expr:输出过滤器,通过表达式,可以过滤掉你不想要的输出 -o firename:默认strace将结果输出到stdount,通过-o 可以将输出写入到firename文件中 十七:测试监控工具——nmon nmon:nmon是一种在Linux操作系统上广泛使用的监控与分析工具, nmon所记录的信息是比较全面的,它能在系统运行过程中实时 地捕捉系统资源的使用情况,并且能输出结果到文件中,然后通 过nmon_analyzer工具产生数据文件与图形化结果。 选项参数: -f:必选参数,必须放在第一个,输出文件的意思;输出的文件名就是默认名称:hostname_date_time.nmon; -F:和-f用法相同,用户可以自己定义文件名称 -s:采集数据的频率,就是保存数据的频率 -c:采集数据次数 -t:输出最消耗资源的进程数据 -m 指定生成的文件目录 -h:查看帮助 常用快捷命令: # c 查看CPU相关信息 # m 查看内存相关信息 # d 查看磁盘相关信息 # n 查看网络相关信息 # t 查看相关进程信息 # h 查看帮助相关信息 # q 退出nmon
nmon_analyzer:分析nmon采集数据后的结果 十八、Linux定时任务 crontab: linux系统是由cron这个系统服务来控制的。Linux系统上 包含很多的计划性工作。使用者自己也可以设置计划任务, 所以Linux系统提供了使用者控制计划任务的命令。 /sbin/service crond status 查看定时任务的服务是否启用成功 start/stop/restart 启动/停止/重新启动 reload:重新载入配置(重新读取命令) crontab的服务权限: crontab的权限管理存储在cron.allow文件与cron.deny文件中。 如果没有可创建在etc目录下 cron.allow文件存诸的是允许哪些用户使用crontab cron.deny文件存储的是不允许哪些用户使用crontab crondtab的使用: crondtab -e :在编辑页面输入命令即可 crondtab的编辑格式: 基本格式:minute hour day month week command 对应单位:分 时 日 月 周 命令 crondtab时间格式的说明: 第一列表示分钟00~59每分钟用*或者*/1表示 第二列表示小时00~23(0表示0点) 第三列表示日期01~31 第四列表示月份01~12 第五列表示星期0~6(0表示星期天) 第六列要运行的命令 crond符号说明: *代表取值范围内的所有值 /代表每的意思 -代表从某个数字到某个数字 ,分隔开几个不同的数字