有什么方法可以从命令行读取仲裁者管理的 gunicorn 活跃工人的数量?

Any way to read number of active workers of gunicorn managed by the arbiter from command line?

正如解释的那样here Gunicorn 使用基于 UDP 的 statsD 协议提供仲裁器和工作器的可选检测。

我的问题:有没有什么方法可以在不安装 statsD 的情况下从命令行实时读取活动(即处理某些请求)gunicorn worker 的数量?我的服务器平均负载有时会达到峰值,我想看看当时有多少 gunicorn worker 在忙?

不确定是否有任何特定的命令。

但通常可以使用shell来完成。 Number of workers mean number of processes. 因此,您可以简单地检查所有活动进程,然后找到其中包含 gunicorn 的所有进程,然后计算所有此类条目。请记住排除 grep 搜索,因为它也有 gunicorn。

你的命令看起来像这样。

ps aux | grep gunicorn | grep -v grep | wc -l

Gunicorn 的默认 statsd 跟踪实际上并不跟踪活跃和不活跃的工作人员。它只是告诉你工人总数,这几乎没有用。

但是 Gunicorn 确实提供了服务器挂钩,让您 运行 在流程的不同点编写代码。这是我想出的解决方案:

sc = statsd.StatsClient(domain, port, prefix=statsd_prefix)

def pre_request(worker, req):
    # Increment busy workers count
    sc.incr('busy_workers', 1)

def post_request(worker, req, environ, resp):
    # Decrement busy workers count
    sc.decr('busy_workers', 1)

你必须把它放在你的配置文件中,然后在启动 gunicorn 时引用配置文件。

gunicorn myapp.wsgi:application --config myapp/gunicorn_config.py

如果您不想使用 statsd,您可以使用相同的触发器,但将信号传输到任何其他可以保持计数的程序,然后 watch 它可以在命令行上看到它。