当前位置: 首页 > article >正文

Locust模拟真实用户并发及优化建议

第一部分为什么要压测因为生产环境不会跟你商量你可以把API想象成一家餐厅的后厨。本地跑通就像你一个人在后厨炒菜流水线得很顺。但突然来了一百个客人同时点餐后厨就乱套了——锅不够、灶不够、配菜来不及切。压测就是在开业前先请一群朋友来“假装点餐”看看后厨到底能扛多少桌瓶颈在灶台CPU还是配菜师傅数据库连接。我之前有个项目上线前自我感觉良好结果活动当天用户量稍微上来点接口响应时间直接从50ms飙升到5秒。为啥因为用了默认的uvicorn单进程只能跑满一个CPU核心而数据库连接池又没限制每个请求都新建连接数据库直接拒绝服务。 要是早做压测这些坑都能提前发现。 第二部分压测工具大乱斗我为什么偏爱这一款工欲善其事必先利其器。市面上压测工具一堆我用下来感受是这样的⚡ab(Apache Bench)老牌工具一条命令就能用。但缺点很明显——不支持HTTP Keep-Alive测不出真实复用连接的情况而且对异步框架支持不友好容易低估性能。⚡wrk性能强悍支持Lua脚本定制。但你要会写Lua对纯Python开发者来说有点门槛。⚡Locust我的最爱❤️ 纯Python写压测脚本可以模拟用户各种行为自带Web UI看实时图表还能分布式施压。最关键的是作为Python程序员改脚本就跟改业务代码一样顺手。今天咱们就用Locust做演示因为它能最贴近地模拟真实用户并发——比如有的用户登录有的浏览商品有的下单每个操作之间还有等待时间。 第三部分手把手实战——压测一个FastAPI接口 1. 先写个简单的FastAPI应用假设我们有一个返回商品信息的接口里面会查询数据库这里用sleep模拟IO。# main.py from fastapi import FastAPI import asyncio app FastAPI() app.get(/products/{product_id}) async def get_product(product_id: int): # 模拟数据库查询耗时 await asyncio.sleep(0.1) # 假设查询需要100ms return {product_id: product_id, name: 程序员防脱发洗发水}⚠️ 警告千万别用time.sleep()会阻塞整个事件循环必须用await asyncio.sleep()或调用异步库。 2. 编写Locust压测脚本安装locustpip install locust。新建locustfile.py# locustfile.py from locust import HttpUser, task, between class ProductUser(HttpUser): wait_time between(1, 3) # 用户模拟等待1~3秒再发请求 task def view_product(self): # 随机访问商品1~100 product_id random.randint(1, 100) self.client.get(f/products/{product_id}) # 可以加更多task模拟不同行为比如登录、下单等 3. 开始压测启动FastAPI应用uvicorn main:app --host 0.0.0.0 --port 8000注意这是单进程仅用于初步测试。另起终端运行Locustlocust -f locustfile.py --hosthttp://localhost:8000。打开浏览器访问http://localhost:8089设置总用户数1000每秒启动10个点击开始。你会看到漂亮的实时图表RPS每秒请求数、响应时间、失败率。我第一次压这个接口单进程下RPS大概在900左右平均响应时间1.2秒CPU直接飙到100%。瓶颈出来了——单核CPU是短板。 第四部分优化“三板斧”让并发飞起来发现问题就好办了。针对FastAPI项目我总结了三步最有效的优化动作第一板斧多进程 GunicornUvicorn单进程只能吃满一个核。用Gunicorn启动多个Uvicorn worker就能利用多核CPU。命令示例gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app --bind 0.0.0.0:8000-w 4表示启动4个worker进程一般设置为CPU核心数×21。再压测RPS直接涨到3000响应时间降到400ms。第二板斧数据库连接池之前我偷懒每次请求都新建数据库连接导致数据库连接数爆满。改用连接池比如databases库或SQLAlchemy的池限制最大连接数并复用连接。配置示例from databases import Database database Database(postgresql://user:passlocalhost/db, min_size5, max_size20)第三板斧缓存热点数据如果接口查的是频繁访问的商品信息加一层Redis缓存QPS能再翻倍。别忘了设置合理的过期时间。优化后再压测同样1000用户RPS可以稳定在5000以上平均响应时间200ms以内。 第五部分那些年我踩过的坑你一定要避开坑1在生产环境直接压测—— 有一次我图省事对线上服务小流量压测结果把数据库打挂了。一定在预发布环境或单独压测环境搞坑2忘了调整系统文件句柄数—— Linux默认打开文件数1024高并发下很快会达到上限导致socket创建失败。记得修改/etc/security/limits.conf。坑3压测客户端自身成为瓶颈—— 单机压测时如果客户端机器性能不够可能客户端先挂了。可以用Locust的分布式模式多台机器一起压。

相关文章:

Locust模拟真实用户并发及优化建议

第一部分:为什么要压测?因为生产环境不会跟你商量 你可以把API想象成一家餐厅的后厨。本地跑通,就像你一个人在后厨炒菜,流水线得很顺。但突然来了一百个客人同时点餐,后厨就乱套了——锅不够、灶不够、配菜来不及切。…...

收藏!小白/程序员轻松入门大模型,抓住AI风口高薪就业机会!

收藏!小白/程序员轻松入门大模型,抓住AI风口高薪就业机会! 本文详细介绍了AI大模型领域的热门就业岗位,包括AI模型研发工程师、数据科学家、算法工程师、AI应用开发工程师、AI平台架构师、AI产品经理和AI测试工程师等。文章强调了…...

2026年木蜡油定做厂家大盘点,究竟哪家才是行业首选?

在当今注重环保和品质的时代,木蜡油作为一种天然环保的涂料,受到了越来越多消费者的青睐。无论是室内外木器家具、木艺制品,还是全屋定制、装饰装修等领域,木蜡油都有着广泛的应用。然而,市场上木蜡油定做厂家众多&…...

Zenith.NET v0.0.7:Metal 后端落地,.NET GPU 抽象的跨平台旅程

为什么要做 Zenith.NET?.NET 生态有不少图形相关的库——绑定层如 Silk.NET、Vortice,抽象层如 Veldrid、Evergine。但现有的抽象层要么停留在较旧的 API 版本(如 DX11/OpenGL),要么是商业引擎的一部分,难以…...

路径构建引擎:开源角色养成系统的架构解析与实践指南

路径构建引擎:开源角色养成系统的架构解析与实践指南 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 一、价值定位:构建虚拟角色的数字孪生平台 …...

Wand-Enhancer完整指南:如何安全增强WeMod用户体验的终极方案

Wand-Enhancer完整指南:如何安全增强WeMod用户体验的终极方案 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer Wand-Enhancer是一款专为WeMod…...

高效批量获取抖音无水印视频:从概念到实战的完整指南

高效批量获取抖音无水印视频:从概念到实战的完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…...

开源广告拦截工具AdGuard浏览器扩展:全平台部署与效率优化指南

开源广告拦截工具AdGuard浏览器扩展:全平台部署与效率优化指南 【免费下载链接】AdguardBrowserExtension AdGuard browser extension 项目地址: https://gitcode.com/gh_mirrors/ad/AdguardBrowserExtension 【价值解析】AdGuard扩展如何重塑你的网络浏览体…...

2026年一体化HR系统TOP8盘点:从集团管控到AI落地的选型指南

进入2026年,企业选一体化HR系统不再只看模块是否齐全,更看能否支撑集团管控、复杂用工、数据洞察与AI提效闭环。红海云在国央企与复杂场景的深度适配、以及AI在招聘与员工服务等环节的可落地性上更突出;用友、北森、金蝶在业人融合、PaaS扩展…...

Dress Code高分辨率虚拟试衣数据集:计算机视觉时尚研究的终极实战指南

Dress Code高分辨率虚拟试衣数据集:计算机视觉时尚研究的终极实战指南 【免费下载链接】dress-code 项目地址: https://gitcode.com/gh_mirrors/dre/dress-code Dress Code是由意大利摩德纳大学研究团队开发的高分辨率多类别虚拟试衣数据集,为计…...

BiliTools AI视频总结功能:革新B站内容消费体验的智能解决方案

BiliTools AI视频总结功能:革新B站内容消费体验的智能解决方案 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTool…...

幻兽帕鲁跨平台存档修复与数据迁移完全指南:解决GUID冲突的5步实战方案

幻兽帕鲁跨平台存档修复与数据迁移完全指南:解决GUID冲突的5步实战方案 【免费下载链接】palworld-host-save-fix Fixes the bug which forces a player to create a new character when they already have a save. Useful for migrating maps from co-op to dedica…...

Vue大屏自适应实战指南:v-scale-screen深度解析与完整方案

Vue大屏自适应实战指南:v-scale-screen深度解析与完整方案 【免费下载链接】v-scale-screen Vue large screen adaptive component vue大屏自适应组件 项目地址: https://gitcode.com/gh_mirrors/vs/v-scale-screen 在当今数据驱动的时代,大屏数据…...

应收账款管理:从“被动应对”到“主动管理”的思维转变

“应收账款管理真的太难了!”这是许多企业管理者的心声。中小型企业尤其容易陷入资金回笼慢、坏账风险高的困境,甚至因此影响现金流健康,拖累企业发展。传统管理模式中,信息孤岛、流程繁琐和决策滞后等问题屡见不鲜,让…...

3步掌握Dify工作流:从零到精通的完整指南

3步掌握Dify工作流:从零到精通的完整指南 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程,自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Trending/aw/Awesome-Dify-Workflow …...

2026届最火的降重复率网站横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 想要有效降低文本 AI 率,针对知网 AI 检测系统独特的识别逻辑,得从语…...

3个实用技巧让Notepad--始终保持高效运行

3个实用技巧让Notepad--始终保持高效运行 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- 如何判断你的编辑器需要性能优…...

2025届最火的十大降重复率助手解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 知网在近期对AIGC检测功能进行了升级,能够精准地识别出通过人工智能生成的文本内…...

绝版图书购书方案问题(折半枚举 / Meet-in-the-Middle)

绝版图书购书方案问题(折半枚举 / Meet-in-the-Middle) 📚 绝版图书购书方案问题(折半枚举 / Meet-in-the-Middle) 一、题目描述 输入 输出 样例输入 样例输出 提示 二、题目解读 2.1 什么是"购书方案"? 2.2 样例解释 三、算法选择分析 3.1 为什么不能直接用…...

ERPC 多区域 Solana RPC 基础设施架构:Bundle Standard方案动态扩展与全球端点部署实践

概述 ERPC 近期对其 Bundle Standard 方案进行了扩展升级,支持按持有凭证数量动态分配多个独立方案实例。这一机制使开发者能够将 Solana RPC、Geyser gRPC 和 Shredstream 端点灵活部署到全球多个区域,同时满足开发环境与生产环境分离的需求。 本文将…...

3步解决Windows图片查看难题:ImageGlass开源图像浏览器深度体验指南

3步解决Windows图片查看难题:ImageGlass开源图像浏览器深度体验指南 【免费下载链接】ImageGlass 🏞 A lightweight, versatile image viewer 项目地址: https://gitcode.com/gh_mirrors/im/ImageGlass 还在为Windows自带图片查看器功能单一而烦恼…...

Windows输入自定义的现代化实践:QKeyMapper实现免重启的键盘映射与虚拟手柄方案

Windows输入自定义的现代化实践:QKeyMapper实现免重启的键盘映射与虚拟手柄方案 【免费下载链接】QKeyMapper [按键映射工具] QKeyMapper,Qt开发Win10&Win11可用,不修改注册表、不需重新启动系统,可立即生效和停止。支持游戏手…...

【GUI-Agent】阶跃星辰 GUI-MCP 解读---()---执行层

基础示例:单工作表 Excel 转 TXT 以下是将一个 Excel 文件中的第一个工作表转换为 TXT 的完整步骤: 1. 加载并读取Excel文件 from spire.xls import * from spire.xls.common import * workbook Workbook() workbook.LoadFromFile("示例.xlsx"…...

新手必看:在快马平台体验openclaw切换模型的入门实践

今天想和大家分享一个特别适合AI开发新手的实践项目——在InsCode(快马)平台体验openclaw切换模型的操作。作为一个刚接触AI开发不久的人,我发现这个平台真的能让人快速理解模型切换的核心概念,下面就把我的实践过程记录下来。 项目背景理解 刚开始接触A…...

Qwen3-TTS-Tokenizer-12Hz快速上手:支持多种音频格式一键处理

Qwen3-TTS-Tokenizer-12Hz快速上手:支持多种音频格式一键处理 1. 认识Qwen3-TTS-Tokenizer-12Hz 1.1 音频编解码器是什么 想象你有一个装满水的桶,想要把它运到远处。直接搬运很费力,但如果把水倒进密封袋里,运输就轻松多了。音…...

从 Vectorless 到 SAIF 再到板级实测:HLS Kernel 功耗估计全流程实战

从 Vectorless 到 SAIF 再到板级实测:HLS Kernel 功耗估计全流程实战 很多人在做 FPGA 或 SoC 上的 HLS kernel 时,第一次接触功耗分析,往往是从 Vivado 里的 report_power 开始的。点一下按钮,工具很快就会给出一个总功耗数字&am…...

注释标准模板

观看main函数能够看出框架,框架要简单,比如训练不给它细分,数据流向关注转为哪个数据,而不是关注维度,维度在调试的时候才关注 1、>表示数据流向 2、# #包围的表示框架 3、# 表示普通的框架内的注释 4、# -----补充…...

如何通过SEO优化让网站排名首页_网站UX设计对SEO有什么影响

如何通过SEO优化让网站排名首页 在当今竞争激烈的互联网环境中,网站排名首页是每个网站主的共同目标。搜索引擎优化(SEO)作为提高网站流量和可见性的关键手段,不可忽视。SEO不仅仅是关于关键词、内容和链接的优化,网站…...

Unity URP描边效果终极指南:5分钟实现专业级游戏轮廓的完整教程

Unity URP描边效果终极指南:5分钟实现专业级游戏轮廓的完整教程 【免费下载链接】Unity-URP-Outlines A custom renderer feature for screen space outlines 项目地址: https://gitcode.com/gh_mirrors/un/Unity-URP-Outlines 你是否曾经为游戏角色在复杂场…...

HunterPie终极指南:免费提升怪物猎人世界游戏体验的完整教程

HunterPie终极指南:免费提升怪物猎人世界游戏体验的完整教程 【免费下载链接】HunterPie-legacy A complete, modern and clean overlay with Discord Rich Presence integration for Monster Hunter: World. 项目地址: https://gitcode.com/gh_mirrors/hu/Hunter…...