启动项目,使用ab命令进行http请求测试。
ab命令全称为 Apache bench 是Apache自带的压力测试工具。ab命令非常实用,它不仅可以对Apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试,ab命令会创建多个并发线程,模拟多个访问者同时对某一个url地址进行访问,实现压力测试。
(1)ab安装:
sudo apt-get install apache2-utils
ab -V
版本显示:
This is ApacheBench, Version 2.3 <$Revision: 1807734 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
(2)参数说明:ab -h
Usage: ab [options] [http[s]://]hostname[:port]/path
Options are:
-n requests Number of requests to perform
-c concurrency Number of multiple requests to make at a time
-t timelimit Seconds to max. to spend on benchmarking
This implies -n 50000
-s timeout Seconds to max. wait for each response
Default is 30 seconds
-b windowsize Size of TCP send/receive buffer, in bytes
-B address Address to bind to when making outgoing connections
-p postfile File containing data to POST. Remember also to set -T
-u putfile File containing data to PUT. Remember also to set -T
-T content-type Content-type header to use for POST/PUT data, eg.
'application/x-www-form-urlencoded'
Default is 'text/plain'
-v verbosity How much troubleshooting info to print
-w Print out results in HTML tables
-i Use HEAD instead of GET
-x attributes String to insert as table attributes
-y attributes String to insert as tr attributes
-z attributes String to insert as td or th attributes
-C attribute Add cookie, eg. 'Apache=1234'. (repeatable)
-H attribute Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
Inserted after all normal header lines. (repeatable)
-A attribute Add Basic WWW Authentication, the attributes
are a colon separated username and password.
-P attribute Add Basic Proxy Authentication, the attributes
are a colon separated username and password.
-X proxy:port Proxyserver and port number to use
-V Print version number and exit
-k Use HTTP KeepAlive feature
-d Do not show percentiles served table.
-S Do not show confidence estimators and warnings.
-q Do not show progress when doing more than 150 requests
-l Accept variable document length (use this for dynamic pages)
-g filename Output collected data to gnuplot format file.
-e filename Output CSV file with percentages served
-r Don't exit on socket receive errors.
-m method Method name
-h Display usage information (this message)
-I Disable TLS Server Name Indication (SNI) extension
-Z ciphersuite Specify SSL/TLS cipher suite (See openssl ciphers)
-f protocol Specify SSL/TLS protocol
(SSL2, TLS1, TLS1.1, TLS1.2 or ALL)
(1)注册请求测试:
ab -n 100 -c 4 -p reg.txt -T application/json http://114.215.169.66/api/reg
reg.txt内容:
{
"email": "[email protected]",
"firstPwd": "e10adc3949ba59abbe56e057f20f883e",
"nickName": "lucky",
"phone": "18888888888",
"userName": "FLY." }
测试结果:
(2)登录请求:
ab -n 100 -c 4 -p login.txt -T application/json http://114.215.169.66/api/login
login.txt内容:
{"pwd": "e10adc3949ba59abbe56e057f20f883e",
"user": "FLY." }
测试结果:
(3)开启登录注册的线程数量:在tc_http_server.conf文件的TreadNum配置。
(4)注意:在发布之前,要把一些打印信息去掉,不然会影响性能。
使用TPS指标:
TPS Transactions Per Second 也就是事务数/秒。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。
注意:test_download和test_delete依赖于test_upload产生的文件。
小规模测试的时候,建议一台客户端机器只模拟一个客户端 ./test_upload.sh 1。
cd ~/tuchuang/fastdfs/test
make
对应的测试程序test_upload.c + test_upload.sh。可以模拟十个并发客户端。.0、.1、…、.9只是客户端序号。
测试结果在fastdfs/test/upload目录。
(1)fail.x是存储上传失败的文件。
(2)file_id.x是存储上传成功的文件。
(3)stat_by_file_type.x是耗时统计。
(4)stat_by_overall.x包含总上传数、成功次数、耗时。
(5)stat_by_storage_ip.x是不同storage的统计。
测试结果显示:
使用6种不同大小的文件进行测试,分别为:
文件规格 | 测试次数 |
---|---|
5K | 1 000 000 |
50K | 2 000 000 |
200K | 1 000 000 |
1M | 2 000 000 |
10M | 20 000 |
100M | 1 000 |
或者
文件规格 | 测试次数 |
---|---|
5K | 50 000 |
50K | 10 000 |
200K | 5 000 |
1M | 500 |
10M | 50 |
100M | 10 |
先考虑磁盘写入能力:
机械硬盘的写入速度和读写速度一般约为120MB/S。
SATA协议的固态硬盘速度约为500MB/S。
NVMe协议(PCIe 3.0×2)的固态硬盘速度约为1800MB/S。
NVMe协议(PCIe 3.0×4)的固态硬盘速度约为3500MB/S。
外网带宽:
通常是千M网是极限
内网带宽:
非I/O优化的实例为千兆共享带宽,I/O优化的实例为万兆或25G共享带宽。
由于是共享网络,因此无法保证带宽速度是不变的。
性能会怎么样? 本质而言要考虑的点:
网络带宽。
磁盘读写速度。
文件大小。
同组storage的个数,因为storage直接要相互同步影响源文件写入的性能。比如 1台服务器写入能力。
举例:
比如三个storage:
磁盘写入能力为:500MB/s,即是4000Mbps
服务器带宽:1000Mbps
局域网带宽:10000Mbps
此时要同时三个storage上传带宽都达到1000M极限,则需要磁盘的写入能力至少是3000Mbps起,而且局域网的带宽至少要达到3000Mpbs,因为局域网之间是需要通过路由去交换数据,并不是两个服务器直连的。
再考虑到方案如果是先上传到nginx,然后再转到fastdfs,则写入能力还要再加上1000Mbps, 所以磁盘写能力至少要达到4000Mbps。
test_download.c + test_upload.sh,他们依赖test_upload后产生的upload里面的file_id.x文件,里面记录了要下载文件的file id。
./test_download 1
测试结果在fastdfs/test/download目录。
test_delete.c + test_delete.sh,他们依赖test_upload后产生的upload里面的file_id.x文件,里面记录了要删除的文件的file id。
./test_delete 1
提升上传性能的方法:
单纯增加每个group的storage只能应对上传峰值,不能从根本上提升上传能力。
提升下载性能的方法:
fastdfs打满千M带宽是很容易的。
在图床项目中,公网发布和测试是非常重要的步骤,它们有助于确保项目在实际应用环境中的稳定性和可靠性。下面是公网发布和测试的一些总结:
测试: