💠

💠 2024-09-06 11:36:43


Web应用性能优化

参考: 怎样正确做 Web 应用的压力测试?

负载测试、压力测试和性能测试

  • 测试手段相似,但是目的不同,负载测试是为了发现系统性能问题,性能测试是为了获取性能指标,压力测试是高负载下的负载测试

对于web应用来说 从前端渲染速度,到页面大小,session存储效率,ajax性能,缓存命中率,数据库设计及访问速度 都要考虑。

客户端

渲染和计算分离


服务端

  1. 对于web后端来说就是请求过多, 数据库连接池不够用, 线程池大量等待的线程, 请求非常缓慢, 直接返回 5xx 错误码…

压力测试准备

  1. 软硬件版本要和正式服务器保持一致。
  2. 网络也需要和正式服务器保持一致。
  3. 在测试高并发的场景下,也要修改linux的默认并发数。

性能基准 指标

参考: 系统吞吐量(TPS)、用户并发量、性能测试概念和公式

外在指标

  1. 吞吐量。每秒钟处理的请求数量;
  2. 响应时间。应用处理一个请求的耗时;
  3. 错误率。一批请求中出错的请求占比。

内在指标

  1. CPU。linux下使用top命令;
  2. 内存。linux下使用top命令;
  3. 服务器负载。linux下使用uptime命令,按照经验值,服务器负载应位于阀值的70%-80%;
  4. 网络。主要包括网络流量和网络连接状态的监控,使用nmon工具;
  5. 磁盘IO linux下可以用iostat监控磁盘状态。

性能监控平台

  • CAT
  • Prometheus

测试工具

Github: HTTP(S) Benchmark Tools
load-testing
dperf

可以通过压力测试工具或者流量重放,复制 等方式模拟高并发业务场景

Apache BenchMark

简称 ab Doc

  • 安装 sudo apt install apache2-utils| sudo pacman -S apache-tools

  • 简单使用 ab -c 并发数 -n 总请求数 URL

    • 查看文档:man abab -h
  • 测试本机超过100连接报错 104:

  • ab -c 5 -n 1000 -X 127.0.0.1:8888 -T application/json -p list.json -C 'JSESSIONID=xxx' URL 使用 Cookie并使用代理 对参数为json的接口发起请求

  • 设置Header-H “AUTHORIZATION: Basic YWRtaW46YWRtaW4=“

Jmeter

wrk

Github地址
参考: wrk 压力测试 http benchmark POST接口
参考: 性能测试之-wrk(转)

  1. 需要手动编译安装 make

ali

ali终端内图形化展示结果

Httperf

Github 比 ab 更强大,能测试出 web 服务能承载的最大服务量及发现潜在问题;比如:内存使用、稳定性。最大优势:可以指定规律进行压力测试,模拟真实环境。

k6

Github k6 像单元测试一样做性能测试


数据库

MySQL

主从复制以及读写分离