最近做一个项目数据要存到redis缓存,大概有1800万条数据,value平均在2kb左右,粗略估计36个G,空间很大,而且经济性不好,内存相比硬盘贵多了。所以选择数据压缩存储的方案。压缩解压缩消耗内存,平时在电脑上解压一下看cpu消耗直线升高。为了不上线后把服务搞垮,在测试环境做了压力测试。
ab命令是apache自带的,能模拟请求量和并发量访问接口数据,对apache或者nginx等其他服务器做负载压力测试。ab命令对发出负载的计算机要求很低,既不会占用很高C PU,也不会占用很多内存,但却会给目标服务器造成巨大的负载,其原理类似CC攻击。
ab使用时的参数配置可以去网上搜索,很多。这里只说说我的使用。
1 模拟1000次请求 100的并发 : ab -n 1000 -c 100 url
-n后面的4000代表总共发出4000个请求;-c后面的1000表示采用1000个并发(模拟1000个人同时访问),后面的网址表示测试的目标URL。
2. 服务器负载情况:
参数说明:
Document Path #测试的页面
Document Length #页面大小
Concurrency Level #测试的并发数
Time taken for tests #整个测试持续的时间
Complete requests: 4000 #完成的请求数量
Failed requests: 0 #失败的请求数量
Write errors: 0
Total transferred #整个过程中的网络传输量
HTML transferred #整个过程中的HTML内容传输量
Requests per second #最重要的指标之一,相当于LR中的每秒事务数,后面括号中的mean表示这是一个平均值
Time per request #最重要的指标之二,相当于LR中的平均事务响应时间,后面括号中的mean表示这是一个平均值
Time per request #每个连接请求实际运行时间的平均值
Transfer rate #平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题
Total #网络上消耗的时间的分解,各项数据的具体算法还不是很清楚
Percentage of the requests served within a certain time (ms)
50% 275
66% 298
75% 328
80% 373
90% 3260
95% 9075
98% 9267
99% 11713
100% 11843 (longest request)
#整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于275毫秒,66%的用户响应时间小于298毫秒,最大的响应时间小于11843毫秒。对于并发请求,cpu实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的,所以基本上第一个Time per request时间约等于第二个Time per request时间乘以并发请求数。
测试的服务器是双核,所以负载很高,占用内存不到90%,大家可以根据上服务器的核数和台数来估计负载。