图床项目之公网发布和测试

news2024/11/15 23:53:57

项目发布和测试

  • 一、http服务测试
    • 1.1、ab http压力测试
    • 1.2、post测试(注册请求和登录请求)
  • 二、性能测试
    • 2.1、生成测试脚本
    • 2.2、上传测试
      • 2.2.1、单客户端测试本地上传到本机服务器
      • 2.2.2、如果使用集群的方式进行测试
    • 2.3、下载测试
    • 2.4、删除测试
    • 2.5、测试性能总结
      • 2.5.1 上传文件
      • 2.5.2、下载文件
  • 总结

一、http服务测试

在这里插入图片描述

启动项目,使用ab命令进行http请求测试。

1.1、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.2、post测试(注册请求和登录请求)

(1)注册请求测试:

ab -n 100 -c 4 -p reg.txt -T application/json http://114.215.169.66/api/reg

reg.txt内容:

{
"email": "3072095585@qq.com", 
"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 也就是事务数/秒。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。

2.1、生成测试脚本

编译
cd fastdfs/test
make
生成
test_upload
test_delete
test_download
执行./gen_files,
生成6中不同大小的测试文件
上传能力测试,
单机可以模拟多个客户端,比如10代表10个客户端。
./test_upload.sh 10
下载能力测试,
单机可以模拟多个客户端,比如10代表10个客户端。
./test_download.sh 10
删除能力测试,
单机可以模拟多个客户端,比如10代表10个客户端。
./test_delete.sh 10

注意:test_download和test_delete依赖于test_upload产生的文件。

小规模测试的时候,建议一台客户端机器只模拟一个客户端 ./test_upload.sh 1。

cd ~/tuchuang/fastdfs/test 
make

2.2、上传测试

对应的测试程序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种不同大小的文件进行测试,分别为:

文件规格测试次数
5K1 000 000
50K2 000 000
200K1 000 000
1M2 000 000
10M20 000
100M1 000

或者

文件规格测试次数
5K50 000
50K10 000
200K5 000
1M500
10M50
100M10

2.2.1、单客户端测试本地上传到本机服务器

2.2.2、如果使用集群的方式进行测试

先考虑磁盘写入能力:
机械硬盘的写入速度和读写速度一般约为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。

2.3、下载测试

test_download.c + test_upload.sh,他们依赖test_upload后产生的upload里面的file_id.x文件,里面记录了要下载文件的file id。

./test_download 1

测试结果在fastdfs/test/download目录。

2.4、删除测试

test_delete.c + test_delete.sh,他们依赖test_upload后产生的upload里面的file_id.x文件,里面记录了要删除的文件的file id。

./test_delete 1

2.5、测试性能总结

2.5.1 上传文件

提升上传性能的方法:

  1. 增加group(水平扩展)。
  2. 增加带宽(带宽能力)。
  3. 使用读写性能高的磁盘。

单纯增加每个group的storage只能应对上传峰值,不能从根本上提升上传能力。

2.5.2、下载文件

提升下载性能的方法:

  1. 增加storage(少写多读的场景)。
  2. 增加group。
  3. 增加带宽。
  4. 使用读写性能高的磁盘。

fastdfs打满千M带宽是很容易的。

总结

  1. 测试上传中,会受带宽的限制,特别是云服务器qps限制;同时也会收到磁盘写入、读取能力限制。
  2. 单机能做到20k左右数据,tps=5000。

在图床项目中,公网发布和测试是非常重要的步骤,它们有助于确保项目在实际应用环境中的稳定性和可靠性。下面是公网发布和测试的一些总结:

测试:

  1. 功能测试:确保图床项目的基本功能能够正常工作,如上传图片、生成链接、展示图片等。
  2. 性能测试:通过模拟多个用户并发访问图床项目,测试服务器的负载能力和响应速度。可以使用工具(如Apache JMeter)来进行性能测试。
  3. 安全性测试:测试图床项目的安全性,如防止恶意文件上传、防止跨站脚本攻击(XSS)等。可以使用安全测试工具(如OWASP ZAP)来进行安全性测试。
  4. 兼容性测试:确保图床项目在不同的浏览器和操作系统上都能正常运行和显示图片。
  5. 异常情况测试:模拟各种异常情况,如网络中断、数据库故障等,测试图床项目的容错能力和恢复能力。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/738556.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vivado2018.3安装教程

1 下载安装包 这个软件是免费的&#xff0c;去官网注册即可完成下载。 https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vivado-design-tools/archive.html 2 解压安装包 注意&#xff1a;安装包需要解压到一个全英文路径 3 安装 1.双…

linux与windows趣味谈

文章目录 前言linux&windows两者常见的系统版本系统安装版本选择linux和windows使用体验聊聊折腾收获Linux系统使用技巧 前言 windows和linux同为常见的操作系统&#xff0c;相信大部分人对widows比较熟悉一点&#xff0c;对linux比较陌生一点儿。但相信&#xff0c;作为程…

如何利用MES管理系统做到车间可视化管理

车间可视化管理是提高生产效率和质量的关键一环。而MES生产管理系统能够为企业提供车间实时数据监控、生产计划管理、异常处理等功能&#xff0c;帮助企业实现车间可视化管理。本文将介绍如何利用MES生产管理系统做到车间可视化管理&#xff0c;包括数据采集、数据分析、实时监…

Error:java: 不再支持源选项 5 请使用 6 或更高版本。

今天电脑重新安装系统&#xff0c;安装jdk环境选择了11版本&#xff0c;但是创建工程时突然报错 报错&#xff1a;Error:java: 不再支持源选项 5 请使用 6 或更高版本 解决方案&#xff1a; 1.查看project setting中的project 和Modules的版本号是否与本机jdk的版本号是否一…

基于单片机快递柜的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;液晶显示当前信息&#xff0c;最多可存储几十个&#xff1b;按下存储按键液晶显示当前快递柜剩余数量&#xff1b;继电器打开&#xff0c;表示用来放物品&#xff1b;正次按下存储按键将取消存快递&#xff0c;继电器关闭快递柜可用…

Linux 生成加密zip文件

一般在Winodws中对zip或者 rar等压缩包文件加密&#xff0c;都是由第三方软件提供的&#xff0c;大家一般右键选择加密就完事了&#xff0c;那么在Linux中&#xff0c;我们如果也有这个需求怎么来操作呢&#xff1f; 实际上&#xff0c;在Linux中这种需求也是挺多的&#xff0c…

WAIC2023圆满落幕!英码科技品牌备受行业青睐,助推人工智能创新发展

7月6日-8日&#xff0c;在美丽的黄浦江畔——上海隆重举办了2023世界人工智能大会&#xff08;以下简称&#xff1a;WAIC2023&#xff09;&#xff0c;英码携人工智能创新产品和行业解决方案精彩亮相&#xff0c;并与广大同仁展开积极交流&#xff0c;共同探讨人工智能发展新技…

【GeoDa实用技巧100例】002:初始GeoDa软件

文章目录 一、GeoDa简介二、软件界面三、新建保存打开数据源1. 新建数据源2. 保存数据源3. 关闭数据源4. 打开数据源 四、保存打开项目1. 保存项目2.打开项目 一、GeoDa简介 GeoDa是一款免费的开源软件工具&#xff0c;用于空间数据分析。GeoDa旨在通过探索和建模空间模式来促…

图片,截图文字识别——最好用的文字提取工具

这个软件是github上一个开源的软件&#xff0c;非常好用 OCR图片转文字识别软件&#xff0c;完全离线。截屏/批量导入图片&#xff0c;支持多国语言、合并段落、竖排文字。可排除水印区域&#xff0c;提取干净的文本。基于 PaddleOCR 。 下载地址&#xff1a; hiroi-sora/Umi…

vscode maven开发

安装jdk 安装maven 安装vscode 安装vscode插件 Extension Pack for JavaSpring Boot Extension PackLombok Annotations Support for VS CodeLanguage Support for Java™ by Red Hat jdk和maven配置 {"workbench.colorTheme": "One Dark Pro","…

第七章——函数(C++的编程模块)

复习函数的基本知识 要使用C函数&#xff0c;必须完成如下工作&#xff1a; 提供函数定义提供函数原型调用函数 库函数是已经定义和编译好的函数&#xff0c;同时可以使用标准库头文件提供其原型&#xff0c;因此只需要正确地调用这种函数即可。但是创建自己的函数时&#…

直线导轨的基本结构

正常来讲&#xff0c;直线导轨的结构组成比较简单&#xff0c;主要都是由&#xff1a;导轨→滑块→轴承&#xff0c;这3大部分组成&#xff0c;其最突出的特点是具有互换性和自动调心能力&#xff0c;所有方向都有高刚性&#xff0c;以下就来详细的说一下直线导轨的基本结构吧&…

13-Vue长列表优化 vue-virtual-scroller

回答&#xff1a; 在大型的企业级项目中经常要渲染大量的数据&#xff0c;这种长列表是一个很普遍的场景&#xff0c;当列表内容越来越多就会导致页面滑动卡顿、白屏、数据渲染较慢的问题&#xff1b; 这种情况主要发生在小程序、移动端或者后台管理的页面当中&#xff1b; 通常…

K 个一组翻转链表——力扣25

题目描述 方法一&#xff09;模拟 class Solution{ public:pair<ListNode*, ListNode*> myReverse(ListNode* head, ListNode* tail){ListNode* prev tail->next;ListNode* p head;while(prev!tail){ListNode* nex p->next;p->next prev;prev p;p nex; }r…

基于STM32+SHT30设计的环境温度与湿度检测系统(IIC模拟时序)

一、项目功能介绍 当前介绍基于STM32F103ZCT6芯片设计的环境温度与湿度检测系统设计过程。当前系统通过SHT30温湿度传感器采集环境温度和湿度数据&#xff0c;并通过模拟IIC时序协议将数据传输到STM32芯片上。然后&#xff0c;STM32芯片通过处理这些数据并将它们显示在0.91寸O…

微信小程序和微信公众号之前的关系

微信小程序和公众号是相互独立的&#xff0c;是2个不同的东西 在公众号上关联小程序后&#xff0c;可以在公众号的底部菜单栏点击直接进入小程序。2者的用户可以互通&#xff0c;其他就没别的

【C++】STL——string类对象的修改操作、string类对象修改函数的介绍和使用、push_back、append、operator+

文章目录 1.string类对象的修改操作&#xff08;1&#xff09;push_back&#xff08;尾插单个字符&#xff09;&#xff08;2&#xff09;append&#xff08;尾插字符串&#xff09;&#xff08;3&#xff09;operator&#xff08;尾插字符串str&#xff09;&#xff08;4&…

linux基础 - SHELL1

目录 一、基础 1.test测试语句 2.逻辑运算 3.类型判断 4.数值判断 5.字符串比较 6.计算表达式 二、shell数组 1.单行定义 2.多行定义 3.单元素定义 4.查看元素 5.基于内容找索引 6.增删改 三、shell高级 1.重定向 2.其他符号 3.信息符号 4.if语句 5.else …

unity --- DoTween插件安装与使用

目录 一.简介 1.1 插件下载 1.2 官方文档 二.导入和设置 三.示例代码 1 循环动画&#xff1a;SetLoops(-1 , loopType ) 2. 动画循环次数&#xff1a;SetLoops( count ) 3. 动画事件监听与回调&#xff1a;OnStart \ OnComplete 4. 动画延迟回调&#xff1a;SetDelay …

Java8特性:函数式接口与Stream流

1、 函数式接口 &#xff08;1&#xff09;四大函数式接口 &#xff08;2&#xff09;代码01 //void accept(T t);消费型接口&#xff0c;有参数&#xff0c;无返回 Consumer<String> consumer t->{System.out.println(t); }; consumer.accept("a"); //…