2 篇文章带有标签 “工作日志 测试”

FastAPI 上传和下载文件的基准测试

使用 FastAPI 实现了文件的上传和下载,部署服务使用了 uvicorn 和 gunicorn+uvicorn 两种方法。

基准测试工具使用的是 wrk

服务器 CPU 40核,内存 256G,操作系统 Ubuntu 20.04,Python3.9

stream 异步读取上传的文件,同步写入 tempfile.NamedTemporaryFile() 生成的文件。 http://172.16.33.159:8000/files/upload/stream/async_read_and_memory_write stream 异步读取上传的文件,同步写入磁盘文件。 http://172.16.33.159:8000/files/upload/stream/async_read_and_disk_write stream 异步读取上传的文件,异步写入磁盘文件。 http://172.16.33.159:8000/files/upload/stream/async_read_and_async_write 异步全量读取上传的文件,异步写入磁盘文件。 http://172.16.33.159:8000/files/upload/single 异步全量读取上传的文件,异步写入磁盘文件。(API 函数定义时没有使用 async) http://172.16.33.

基于健康码识别的 FastAPI 同步和异步函数的基准测试

健康码识别服务使用了 FastAPI 进行开发的,本周主要工作是为了对健康码识别的服务进行性能调优。接口函数使用了 async 关键字,但是内部的实现并没有使用 await。由于改写成异步代码需要时间,这里并没有改写代码,只是删除了 async 关键字。部署服务使用了 uvicorn 和 gunicorn+uvicorn 两种方法。

基准测试工具使用的是 ab

  • 4 个进程可以发挥到最佳效果
  • 8 个进程已经到了上限了
  • 在部署这种密集计算的应用下,gunicorn + uvicorn 并没有比 uvicorn 强,但如果您需要管理进程,它们就是最佳组合。
  • 通过基准测试发现,最大的瓶颈不是 GPU,而且 CPU,GPU 一张卡的负载还没有 40 核 CPU 的负载高。

异步(使用了 async 关键字)函数,在压测的过程中基本上不会失败(Failed),同步函数,在压测过程中会经常失败,随着并发数的增加而增加。目前还没有找到原因