别再只用Uvicorn了!用Gunicorn+Supervisor部署FastAPI,让你的服务稳如老狗

张开发
2026/4/16 4:52:34 15 分钟阅读

分享文章

别再只用Uvicorn了!用Gunicorn+Supervisor部署FastAPI,让你的服务稳如老狗
别再只用Uvicorn了用GunicornSupervisor部署FastAPI让你的服务稳如老狗当你用Uvicorn直接运行FastAPI应用时是否遇到过这些情况服务运行一段时间后莫名其妙崩溃、服务器重启后需要手动重新启动应用、流量突增时响应变慢甚至超时这些问题的根源在于——Uvicorn本身并不是为生产环境设计的完整解决方案。1. 为什么Uvicorn单独使用不够生产级Uvicorn作为ASGI服务器确实性能卓越但单独使用时存在几个致命缺陷单进程风险默认单进程运行一个worker崩溃整个服务就挂了无自动恢复进程意外终止后不会自动重启缺乏监控没有内置的日志轮转和状态监控机制启动管理弱服务器重启后需要手动重新启动服务# 典型的问题场景 - 直接运行Uvicorn uvicorn app:app --host 0.0.0.0 --port 8000提示开发环境用Uvicorn直接运行没问题但生产环境需要更健壮的方案2. GunicornUvicorn的黄金组合Gunicorn作为进程管理器配合Uvicorn作为worker能完美解决单点故障问题核心优势对比特性单独UvicornGunicornUvicorn多进程❌ 单进程✅ 多worker负载均衡❌ 无✅ 自动分配Worker崩溃隔离❌ 全挂✅ 只影响单个worker并发处理能力⚠️ 一般✅ 优秀配置示例gunicorn app:app -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000关键参数解析-w 4启动4个worker进程建议设置为CPU核心数的2-4倍-k uvicorn.workers.UvicornWorker使用Uvicorn worker处理异步请求3. Supervisor让服务真正永不停机即使有了Gunicorn服务器重启后仍需要手动启动服务。Supervisor作为进程守护工具能解决这个问题Supervisor核心功能自动启动服务崩溃后立即重启日志轮转管理集中管理多个服务配置步骤安装Supervisorsudo apt update sudo apt install supervisor -y创建配置文件/etc/supervisor/conf.d/fastapi.conf[program:fastapi] command/path/to/venv/bin/gunicorn app:app -w 4 -k uvicorn.workers.UvicornWorker --bind 127.0.0.1:8000 directory/path/to/your/project useryouruser autostarttrue autorestarttrue stderr_logfile/var/log/fastapi.err.log stdout_logfile/var/log/fastapi.out.log启用配置sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start fastapi4. 高级调优与故障排查4.1 Worker数量优化worker数量不是越多越好需要根据服务器配置调整CPU密集型worker数 ≈ CPU核心数I/O密集型worker数 ≈ CPU核心数 × 2~4查看CPU核心数nproc # 显示CPU核心数4.2 内存管理每个worker都会占用内存监控内存使用很重要# 查看内存使用情况 free -h # 查看Gunicorn内存占用 ps aux | grep gunicorn4.3 常见问题解决问题1Worker频繁崩溃检查应用是否有内存泄漏增加worker重启阈值问题2请求超时调整Gunicorn的timeout参数检查是否有阻塞操作问题3日志文件过大配置logrotate进行日志轮转示例配置/etc/logrotate.d/fastapi/var/log/fastapi.*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 youruser yourgroup sharedscripts postrotate supervisorctl restart fastapi endscript }5. 完整部署流程示例假设项目路径为/opt/fastapi-app用户为deploy安装依赖sudo apt update sudo apt install python3 python3-venv python3-pip supervisor -y创建虚拟环境python3 -m venv /opt/fastapi-app/venv source /opt/fastapi-app/venv/bin/activate pip install fastapi uvicorn gunicornSupervisor配置sudo tee /etc/supervisor/conf.d/fastapi.conf EOF [program:fastapi] command/opt/fastapi-app/venv/bin/gunicorn app:app -w 4 -k uvicorn.workers.UvicornWorker --bind 127.0.0.1:8000 directory/opt/fastapi-app userdeploy autostarttrue autorestarttrue stderr_logfile/var/log/fastapi.err.log stdout_logfile/var/log/fastapi.out.log EOF启动服务sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start fastapi验证状态sudo supervisorctl status这套组合方案在我的多个生产项目中稳定运行超过2年经历过多次服务器重启和流量高峰始终保持99.9%以上的可用性。

更多文章