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

Gunicorn 配置文件参数详解

Gunicorn 配置文件参数详解

Gunicorn (Green Unicorn) 是一个用于 UNIX 系统的 Python WSGI HTTP 服务器,以下是其配置文件中的主要参数及其用法说明:

基础配置参数

1. 绑定地址和端口

  • bind (字符串): 指定服务器绑定地址和端口

    • 格式: [HOST]:PORT 或 unix:PATH

    • 示例: bind = "0.0.0.0:8000" 或 bind = "unix:/tmp/gunicorn.sock"

    • 默认: "127.0.0.1:8000"

2. 工作进程配置

  • workers (整数): 工作进程数量

    • 建议值: CPU核心数 × 2 + 1

    • 示例: workers = 3

    • 默认: 1

  • worker_class (字符串): 工作进程类型

    • 选项: sync (同步), gthread (线程), gevent (协程), uvicorn.workers.UvicornWorker (ASGI)

    • 示例: worker_class = "gthread"

    • 默认: "sync"

  • threads (整数): 每个工作进程的线程数

    • 仅当使用 gthread 工作器时有效

    • 示例: threads = 4

    • 默认: 1

性能和资源参数

3. 超时控制

  • timeout (整数): 工作进程无响应超时时间(秒)

    • 超时后工作进程将被重启

    • 示例: timeout = 30

    • 默认: 30

  • graceful_timeout (整数): 优雅关闭超时时间(秒)

    • 工作进程收到停止信号后完成当前请求的时间

    • 示例: graceful_timeout = 30

    • 默认: 30

  • keepalive (整数): 保持连接的时间(秒)

    • 示例: keepalive = 2

    • 默认: 2

4. 资源限制

  • worker_connections (整数): 每个工作进程的最大并发连接数

    • 示例: worker_connections = 1000

    • 默认: 1000

  • max_requests (整数): 工作进程处理的最大请求数

    • 达到此数后工作进程自动重启,防止内存泄漏

    • 示例: max_requests = 1000

    • 默认: 0 (无限制)

  • max_requests_jitter (整数): 最大请求数的随机波动范围

    • 避免所有工作进程同时重启

    • 示例: max_requests_jitter = 50

    • 默认: 0

日志配置参数

5. 日志输出

  • accesslog (字符串): 访问日志文件路径

    • "-" 表示输出到标准错误

    • 示例: accesslog = "/var/log/gunicorn/access.log" 或 accesslog = "-"

    • 默认: None (不记录访问日志)

  • errorlog (字符串): 错误日志文件路径

    • 示例: errorlog = "/var/log/gunicorn/error.log"

    • 默认: "-" (输出到标准错误)

  • loglevel (字符串): 日志级别

    • 选项: debuginfowarningerrorcritical

    • 示例: loglevel = "info"

    • 默认: "info"

6. 日志格式

  • access_log_format (字符串): 访问日志格式

    • 常用变量: %h (客户端地址), %l (用户名), %u (认证用户名), %t (时间), %r (请求行), %s (状态码), %b (响应大小)

    • 示例: access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'

安全相关参数

7. 权限控制

  • user (整数/字符串): 运行工作进程的用户ID或用户名

    • 需要以root启动Gunicorn

    • 示例: user = "nobody" 或 user = 65534

    • 默认: 当前用户

  • group (整数/字符串): 运行工作进程的组ID或组名

    • 示例: group = "nogroup" 或 group = 65534

    • 默认: 当前组

  • umask (整数): 工作进程的文件模式创建掩码

    • 八进制格式: umask = 0o007

    • 默认: 0

高级配置参数

8. 进程管理

  • daemon (布尔): 是否以守护进程方式运行

    • 示例: daemon = True

    • 默认: False

  • pidfile (字符串): PID文件路径

    • 示例: pidfile = "/var/run/gunicorn.pid"

    • 默认: None

  • worker_tmp_dir (字符串): 工作进程临时目录

    • 使用内存文件系统可提高性能

    • 示例: worker_tmp_dir = "/dev/shm"

9. 请求处理

  • limit_request_line (整数): 请求行的最大字节数

    • 示例: limit_request_line = 4094

    • 默认: 4094

  • limit_request_fields (整数): 请求头字段的最大数量

    • 示例: limit_request_fields = 100

    • 默认: 100

  • limit_request_field_size (整数): 单个请求头字段的最大字节数

    • 示例: limit_request_field_size = 8190

    • 默认: 8190

import multiprocessing
import signal
import sys
import os
import gevent.monkey
gevent.monkey.patch_all()def handle_exit(server):print("收到退出信号,开始优雅退出...")# 发送 SIGTERM 给所有工作进程server.kill_workers(signal.SIGTERM)# 等待所有工作进程退出print("所有工作进程已退出")sys.exit(0)# 注册主进程退出钩子
def when_ready(server):signal.signal(signal.SIGINT, lambda s, f: handle_exit(server))signal.signal(signal.SIGTERM, lambda s, f: handle_exit(server))# ========== 基础配置 ==========
# 绑定地址和端口
bind = "0.0.0.0:8000"# 工作进程配置
workers = multiprocessing.cpu_count() * 2 + 1  # 自动计算工作进程数
worker_class = "gthread"  # 使用线程工作器
threads = 4  # 每个工作进程的线程数# ========== 超时控制 ==========
timeout = 30  # 工作进程无响应超时
graceful_timeout = 30  # 优雅关闭超时
keepalive = 2  # 保持连接时间# ========== 资源限制 ==========
worker_connections = 1000  # 每个工作进程的最大并发连接数
max_requests = 1000  # 工作进程处理的最大请求数
max_requests_jitter = 50  # 最大请求数的随机波动范围# ========== 日志配置 ==========
accesslog = "-"  # 访问日志输出到stdout
errorlog = "-"  # 错误日志输出到stderr
loglevel = "info"  # 日志级别
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'# ========== 安全配置 ==========
user = "nobody"  # 运行工作进程的用户
group = "nogroup"  # 运行工作进程的组
umask = 0o007  # 文件模式创建掩码# ========== 高级配置 ==========
daemon = False  # 不以守护进程运行
pidfile = "/var/run/gunicorn.pid"  # PID文件路径
worker_tmp_dir = "/dev/shm"  # 工作进程临时目录# 请求处理限制
limit_request_line = 4094  # 请求行最大字节数
limit_request_fields = 100  # 请求头字段最大数量
limit_request_field_size = 8190  # 单个请求头字段最大字节数# ========== 钩子函数 ==========
def on_starting(server):print("🚀 Gunicorn starting...")def when_ready(server):print(f"✅ Gunicorn ready. Serving on {server.cfg.bind}")def pre_fork(server, worker):print(f"🔧 About to fork worker {worker.pid}")def post_fork(server, worker):print(f"👷 Worker {worker.pid} forked")def worker_int(worker):print(f"🛑 Worker {worker.pid} received INT or QUIT signal")def worker_exit(server, worker):print(f"👋 Worker {worker.pid} exited")def on_exit(server):print("👋 Gunicorn exiting...")

http://www.xdnf.cn/news/10450.html

相关文章:

  • Fashion-MNIST LeNet训练
  • yolo个人深入理解
  • 2023年6月6级第一套第一篇
  • 上位机知识篇---无线数据传输
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月1日第95弹
  • ROS仓库GPG签名密钥过期问题
  • java基础学习(二十)
  • 【C++进阶篇】哈希表的封装(赋源码)
  • 历年中国人民大学计算机保研上机真题
  • Linux系统配置Docker镜像加速
  • HTML表单
  • 基于 Zynq 平台的 EtherCAT 主站的软硬件协同设计
  • 简历制作要精而不简
  • C#实现远程锁屏
  • NACOS 配置中心--数据隔离
  • 每日算法-250601
  • LLaMA-Factory - 批量推理(inference)的脚本
  • 性能优化 - 案例篇:缓存_Guava#LoadingCache设计
  • day43 python Grad-CAM
  • 第303个Vulnhub靶场演练攻略:Thales1
  • 长上下文推理新范式!QwenLong-L1如何通过强化学习突破大模型语境局限?
  • Trae AI编程创意实践-DIY粽子应用
  • ArcPy错误处理与调试技巧(3)
  • LangChain-结合GLM+SQL+函数调用实现数据库查询(一)
  • 内存管理 : 05 内存换入-请求调页
  • [创业之路-402]:企业战略管理案例分析-战略执行-关键任务
  • 衣服 关键点识别
  • Spring Boot DevTools 热部署
  • PINNs案例——二维磁场计算
  • 彻底理解Spring三级缓存机制