Gunicorn:提供了更大的灵活性,你可以通过命令行参数、环境变量或一个 Python 配置文件(.py)来配置它
为什么需要配置 Gunicorn?
默认的 Gunicorn 设置可能不适合你的生产环境。通过配置,你可以优化性能、资源使用和稳定性,例如:
top 或 htop等工具监控
1、命令行参数(最简单)
直接在启动命令中指定所有选项。适用于简单场景或临时测试
缺点:命令会变得很长,难以管理和维护,也容易出错
2、环境变量
可以通过设置环境变量来配置某些参数,但这种方式不常用作主要配置方法
3、 配置文件(推荐用于生产环境)
这是最专业、最可维护的方式。你可以创建一个 Python 文件(例如 gunicorn_conf.py)来存储所有配置
优点:
强烈推荐(使用配置文件)
在你的项目目录(或 /etc/ 下)创建一个文件,例如 gunicorn_conf.py
# gunicorn_conf.py
import multiprocessing
# 服务器套接字
bind = "127.0.0.1:8000" # 只监听本地请求,让Nginx来代理
# 工作进程数
# 经典公式: (2 * num_cores) + 1
# 先使用这个公式,再根据实际负载进行调整
workers = multiprocessing.cpu_count() * 2 + 1
# 每个工作进程的线程数
# 对于I/O密集型应用(如Django),使用线程可能有益
threads = 2
# 工作模式(通常不需要修改,除非你用到了异步)
worker_class = 'sync'
# 最大并发客户端数(每个工作进程)
worker_connections = 1000
# 最大请求数:工作进程处理这么多请求后会自动重启,防止内存泄漏
max_requests = 1000
max_requests_jitter = 50 # 添加随机抖动,避免所有工作进程同时重启
# 超时设置:如果一个工作进程在这么多秒内没有响应,它将被重启
timeout = 30
# 优雅超时:接到重启信号后,等待当前请求完成的最长时间
graceful_timeout = 30
# 日志配置
# 访问日志文件
accesslog = "/var/log/gunicorn/access.log"
# 错误日志文件
errorlog = "/var/log/gunicorn/error.log"
# 日志级别
loglevel = "info"
# 进程名称(方便用ps, top等工具查看)
proc_name = "my_django_app_gunicorn"
# 在fork工作进程之前加载应用,可以节省内存,但可能会带来兼容性问题
preload_app = True
使用 -c 参数指定配置文件路径
gunicorn -c /path/to/your/gunicorn_conf.py myproject.wsgi:application
在生产环境中,你通常不会手动在终端启动 Gunicorn。而是使用 Systemd 来将其作为一个服务管理(开机自启、自动重启、集中日志等)
创建一个 Systemd 服务文件:
/etc/systemd/system/gunicorn.service
[Unit]
Description=gunicorn daemon for my Django project
After=network.target
[Service]
User=www-data # 运行此服务的用户,按你的实际情况修改
Group=www-data # 用户组
WorkingDirectory=/path/to/your/project # 你的Django项目根目录
Environment="PATH=/path/to/your/venv/bin" # 虚拟环境的路径
ExecStart=/path/to/your/venv/bin/gunicorn -c /path/to/your/gunicorn_conf.py myproject.wsgi:application
[Install]
WantedBy=multi-user.target
然后就可以用 systemctl 来管理了:
sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn # 设置开机自启
sudo systemctl status gunicorn # 查看状态