性能测试经验

大佬们轻喷,这只是一些小的工作经验,莫怪莫怪

一、性能测试如何进行

1、了解业务,也就是需求是什么,例如系统崩溃、服务器持续加压、单接口一次性并发等
2、了解基本的架构和服务器等配置、是否有缓存、是否有负载均衡、消息是否使用消息队列模式等
3、找出风险点、需要压测的场景、环境的一致性(测试环境是否与线上一致)
4、设计场景及脚本,准备好数据。

二、性能测试中发现CPU过高如何分析?

从进程中找问题:

1、top查看进行占用资源情况(htop工具如果有的话可以更好的查看,),找到占用资源最高的PID

2、htop安装:

yum -y install epel-release
yum -y install htop
安装完成后:htop 命令即可
在这里插入图片描述

堆栈信息查看可使用jstack -l
注:使用htop可以清楚的看见command,列中占用资源最多的进行路径。
pid:进行的id
tid:线程的id
top和htop都是查看cpu使用情况,htop命令比较亮眼
ps:可以查看进程以及进程中线程的当前CPU使用情况。属于当前状态的采样数据。
jstack:Java提供的命令。可以查看某个进程的当前线程栈运行情况。根据这个命令的输出可以定位某个进程的所有线程的当前运行状态、运行代码,以及是否死锁等等。

3、cpu满载分析

1、确定cpu过高是web服务器还是DB服务器
2、接口的类型,是查询还是写入
3、web服务器cpu过高可能是服务器报错了,需要查看日志
4、内存发生泄漏了,或者内存释放不充分,导致持续增长,cpu处理不过来
5、数据库cpu过高,需要优化语句,查询结果不大的,尽量使用1条查询语句
6、数据查询添加索引,减少查询消耗,减少反复查询或多表联查。

三、瓶颈分析

硬件上的性能瓶颈:

一般指的是CPU、内存、磁盘I/O 方面的问题,分为服务器硬件瓶颈、网络瓶颈(对局域网可以不考虑)、服务器操作系统瓶颈(参数配置)、中间件瓶颈(参数配置、数据库、web服务器等)、应用瓶颈(SQL 语句、数据库设计、业务逻辑、算法等)。

应用软件上的性能瓶颈:

一般指的是应用服务器、web 服务器等应用软件,还包括数据库系统。
例如:中间件weblogic 平台上配置的JDBC连接池的参数设置不合理,造成的瓶颈。

应用程序上的性能瓶颈:

一般指的是开发人员新开发出来的应用程序。
例如,程序架构规划不合理,程序本身设计有问题(串行处理、请求的处理线程不够),造成系统在大量用户方位时性能低下而造成的瓶颈。

操作系统上的性能瓶颈:

一般指的是windows、UNIX、Linux等操作系统。
例如,在进行性能测试,出现物理内存不足时,虚拟内存设置也不合理,虚拟内存的交换效率就会大大降低,从而导致行为的响应时间大大增加,这时认为操作系统上出现性能瓶颈。

四、具体问题优化

确认问题进行调优分析从哪些方面入手

1、代码逻辑上:通常情况下,bug 都是写出来的,性能也是一样,代码的逻辑是否有死逻辑,调用的是否合理(读不懂代码就找开发配合最稳妥,譬如我)

2、数据库的配置:经常引起整个系统运行慢,比如我们的二手车,查询贼慢,没有优化前,列表页+几个类型的查询几次就会很慢,加入大量的seo后更慢,这时候就要DBA进行sql审查了。

3、操作系统配置:这个怎么说呢,一些不合理的配置可能会引起问题(一般几率较小,这得多low才会这样呢)

4、硬件:内存大小、硬盘读写速度等

5、网络:网络负载过重造成网络冲突、延迟等都会引起问题
查找瓶颈可以按照一个大致的思路进行
服务器硬件瓶颈→网络瓶颈(对局域网,可以不考虑)→服务器操作系统瓶颈(参数配置)→中间件瓶颈(参数配置,数据库,web服务器等)→应用瓶颈(SQL语句、数据库设计、业务逻辑、算法等),一般我们分析出系统需要承受的最大并发即可,我们是电商,所有秒杀抢购之类的都是需要提升的,必要的时候,做好负载均衡的准备。

五、注意的点

1、设计开发过程中就要考虑性能,框架的选用等要问清楚,例如PHP基础框架大并发支持不完美,hyperf框架对于高性能支持很好

2、明确性能的目标,需要做多少,为什么做,是否有预期,无预期的情况下就要压出瓶颈,进行调优了

3、调优后的程序,要进行功能的走查,各个会影响及交互的点都要运行正常

4、系统的设计及逻辑的处理能解决大部分的性能问题,调优只能是一个辅助手段,类似补丁。

5、调优不是一次就能完成的,要进行循序渐进,并且每一次调优后都要反馈都后面的开发过程中去

6、调优是调优了,但是不能把代码的可读性和可维护性给做掉,这样失去了程序的意义,后期迭代更加困难

猜你喜欢

转载自blog.csdn.net/qq_34004131/article/details/114397831