Python 有没有办法从命令行读取仲裁人管理的gunicorn的活动工作人员数量?
如前所述 Gunicorn通过UDP提供了一个可选的仲裁器和工作程序检测工具,使用statsD协议Python 有没有办法从命令行读取仲裁人管理的gunicorn的活动工作人员数量?,python,gunicorn,instrumentation,Python,Gunicorn,Instrumentation,如前所述 Gunicorn通过UDP提供了一个可选的仲裁器和工作程序检测工具,使用statsD协议 我的问题:是否有任何方法可以在不安装statsD的情况下从命令行实时读取活动(即处理某些请求)gunicorn工作人员的数量?我的服务器平均负载有时会达到峰值,我想看看这段时间有多少gunicorn工作人员在忙?不确定是否有任何特定的命令 但通常可以使用shell来完成工作进程数表示进程数。因此,您可以简单地检查所有活动进程,然后查找其中包含gunicorn的所有进程,然后统计所有此类条目。请记住
我的问题:是否有任何方法可以在不安装statsD的情况下从命令行实时读取活动(即处理某些请求)gunicorn工作人员的数量?我的服务器平均负载有时会达到峰值,我想看看这段时间有多少gunicorn工作人员在忙?不确定是否有任何特定的命令 但通常可以使用shell来完成<代码>工作进程数表示进程数。因此,您可以简单地检查所有活动进程,然后查找其中包含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\u config.py
如果您不想使用statsd,您可以使用这些相同的触发器,但可以将一个信号传送到任何其他可以进行计数的程序,然后
观察它,在命令行上查看它。它将给所有工作人员提供信号,即使他们在等待下一步时处于非活动状态reqeust@Ali对所以你只想知道在职工人?是的。我也希望能找到答案。即使使用gunicorn导出的statsD指标,也无法轻松确定在任何给定时间有多少员工在积极地为请求提供服务。它只显示工人总数,包括空闲工人。谢谢,这很有用。但是,如果我没有弄错的话,您的代码会跟踪正在处理的请求的数量,如果每个工作线程的线程数设置为1,则该数量仅等于活动工作线程的数量?您是正确的,上面的代码实际上跟踪“活动请求”。如果每个工作线程都有多个线程,那么上面将跟踪活动线程,因为每个线程同时处理不同的请求。因此,在这种情况下,“忙碌的工作线程”的概念就没有那么有意义了,因为一个有两个线程的工作线程可以同时有一个线程忙碌和一个线程不忙碌,而“活动线程”则成为更有意义的指标,这就是您要衡量的。