让我们来对服务器做一下压力测试吧!
本篇文章讲一下压力测试应该怎么做,压力测试过程中需要注意哪些指标,以及需要注意的事项。
首先,我们要清楚我们进行压测的目的是什么。是为了找出服务的性能瓶颈,还是为了检验当前服务能否扛住xxx量的并发?
俗话说,“不打无准备之仗”,首先要根据压测目的出一个可行的书面方案。
下面是一个方案模板
对某某某服务进行性能压力测试
背景说明: 因为啥啥啥有xxx人同时在线,为了保障服务的稳定性,需要对某某某服务进行性能测试,检验其能否扛住xxx的量。
测试内容: 一般是http的api。
服务端
1
2
3
4
| CPU: n核
内存:xMb
硬盘:可作相应的说明
web server: nginx(apache) + php7.1
|
客户端
1
2
| 客户端的配置简单列一下
压测工具:ab 版本
|
具体的压测过程
1
2
3
| ab -n 1000 -c 1000 http url
# -n: Number of requests to perform
# -c: Number of multiple requests to make at a time
|
逐步加大客户端请求的并发量,观察服务器的负载,记录相应资源(CPU、内存、网络I/O)的指标,以便得出最终结论。
压测结束之后,出一份带详细数据说明的报告。
可能的坑点
1、客户端并发提不上去,测不出服务器实际并发上限,解决方案为多客户端同时请求。
2、单机有最大打开的文件限制,可用ulimit -a查看当前用户的具体参数。open files默认为1024,为提高服务的并发量,需要修改其默认值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| $ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 1684
max locked memory (kbytes, -l) 16384
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 1684
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
|
PS. 压测工具除了ab,还可以选用apache jmeter
1
2
3
4
| jmeter -n -t scriptfile.jmx -l report/output.res -e -o report/index
# scriptfile.jmx: 测试脚本
# report/output.res: 生成报告数据文件(不能为已存在的文件)
# report/index: 生成报告存放目录(不能为已存在的目录)
|