1. 项目背景及架构介绍
1.1 背景介绍
被测项目是一个 B2B 类的工业品商城网站,主要分为中文版和国际版两块。网站首页截图如下:
对该系统进行性能测试主要目的有两个:
- 验证系统的承压能力,估测系统可承受的访问压力;
- 查找定位有性能问题的功能模块或接口;
1.2 架构图
我们对一个系统进行压测前,需要了解清楚系统架构,这样才能知道后续压测需要关注监控哪些服务器指标。本被测电商系统的架构图如下:
通过分析架构图,可以知道我们在做性能时,需要重点监控如下几类服务器,以帮助我们定位服务器性能瓶颈所在。
- SLB 服务器(重点关注网络流量、CPU)
- Nginx 服务器(重点关注网络流量、CPU)
- Tomcat 服务器(重点关注网络流量、CPU、内存)
- MySQL 服务器(重点关注网络流量、磁盘 IO、CPU)
- MQ 服务器(重点关注网络流量、CPU)
- Redis 服务器(重点关注内存)
注:因为要监控的服务器比较多,我们不可能每台服务器都去通过一些命令(如 top、free、iostat、netstat 等)去检查服务器资源消耗情况,其实现在都有一些很好的可视化运维系统(如 OpenFalcon、Zabbix 等),公司运维人员都会有一些类似监控系统,只需在要监控的服务器上部署一下 Agent 即可把服务器监控起来,而且我们可以配置一些告警策略,比如当 CPU 使用率高于 90% 时告警发送邮件;这样我们在压测过程中不用实时盯着各个服务器的各项指标,当接收到告警后,我们再去翻看历史监控数据即可。
2. 环境准备
性能环境准备主要包括两块:
- 被测系统环境;
- 压力机环境。
2.1 被测系统环境
一般做性能要有独立的测试环境。条件允许的话,服务器各项配置要尽量与生产保持一致或与生产成比例配置,这样方便我们通过测试结果预估线上环境承压能力。当然如果你做性能测试的目标只是为了找程序上存在的性能问题,对环境的配置要求会小很多,一般的测试环境就可以拿来进行压测,但要选好测试时间并做好数据隔离,避免对功能测试造成影响。
我这次测试电商系统因为还未正式上线,可以直接拿线上生产环境进行压测,这样就没有单独再搭建独立的性能测试环境,但项目上线后,性能压测环境由线上环境改为了预发布环境。
注:性能压测环境一定要配置好监控,并做好数据的备份隔离;我这里选用的监控平台为 OpenFalcon。
2.2 压力机环境
这个环境就是压测工具的运行环境,用来生成测试负载。测试工具我选用的是开源压测工具 Jmeter,并准备了与被测系统环境同网段的两台 VM 作为压力机。
特别注意的是,我们进行压测时也要通过 JConsole 等工具监控 Jmeter 的 JVM 消耗情况,以防压力机达到性能瓶颈,影响性能测试结果的准确。
注:压测工具有很多,选用时根据系统特点和需求来选用即可,比如 LR、Jmeter、Galting、AB 等。