## 测试内容
测试 [CodeAndPeace社区](https://cap.yzt.cool) 首页(热帖排行)高并发访问的效果,测试分为本地开发环境和线上生产环境,对比使用本地缓存组件 Caffeine 和不使用缓存(查询直接走 MySQL)情况下的首页平均响应时间和吞吐量。
## 测试环境
测试环境主要分为本地开发环境和线上生产环境
### 开发环境
OS:Windows 10
CPU:AMD Ryzen7 3700x,8 核 16 线程
内存:16G,3200 MHz
硬盘:固态
压测软件:JMeter
### 生产环境
OS:CentOS 7
CPU:Intel Xeon Gold 6161,单核单线程
内存:2G
硬盘:机械
压测软件:Apache Benchmark
### 备注
1. 生产环境是华为云服务器,其实是虚拟化的硬件
2. 为了避免网络环境影响,两次测试其是都是本地访问,如果是远程访问,并不会有这么好的结果
## 测试结果
### 开发环境
#### 不同并发量下的吞吐量
1. 使用缓存时,在各个并发量下,吞吐量基本维持在不使用缓存时的 10 倍左右。
2. 当并发量提高到 3000+ 时,依赖于 AMD 多核 CPU 的优势(AMD YES !),吞吐量并没有明显的下降。

#### 不同并发量下的平均响应时间
无论是否使用缓存,响应时间与并发量都呈现线性关系,但是使用缓存的曲线斜率要小很多,当并发量来到 3000+ 时,不使用缓存的平均响应时间已经达到 6s+,这显然是无法接受的,而使用缓存后,平均响应时间维持在 0.5s 左右。

#### 特别说明——不同并发量下 CPU 占用
1. 通过查看任务管理器,不使用缓存时,服务主程序的 CPU 占用最高到 64% 左右,且 MySQL 服务在各个并发量下的 CPU 占用基本都维持在 10% 左右,并没有提高,也就是说,CPU 还没有发挥全部实力,数据库的处理能力就已经到达了瓶颈(给你机会你不中用啊!)
2. 如果使用缓存,主程序 CPU 占用可以维持在 85% 以上,并发量大时可以接近90%,且 MySQL 并没有占用 CPU。

### 生产环境
#### 不同并发量下的吞吐量
因为云服务器的配置相比自己的电脑较低,只有单核(最普通的学生机),所以使用缓存后的提升并没有比自己本机上大,不过相比不使用缓存,依然有 3-4 倍的提升。

#### 不同并发量下的平均响应时间
线上环境下,响应时间随并发量的变化规律与生产环境差不多,使用缓存后的优化效果也有 3-4 倍的提升。

## 软件链接
* 压测软件:[JMeter](https://jmeter.apache.org)
* 压测软件:[Apache Benchmark](http://httpd.apache.org/docs/2.0/programs/ab.html)
* 画图软件:[Tecplot2015 ](https://www.tecplot.com)

CodeAndPeace 压力测试