如何读取/追踪Gunicorn的worker connections当前连接数?
Gunicorn 如何追踪 worker connections 对应的实际并发连接数?
Gunicorn本身没有内置的直接查看当前/历史并发连接数的功能,但可以通过以下几种方式实现你的需求:
利用StatsD集成监控
启动Gunicorn时启用StatsD支持,命令行加参数--statsd-host=localhost:8125,或者在配置文件里设置statsd_host = "localhost:8125"。Gunicorn会自动发送一系列监控指标到StatsD,其中gunicorn.requests.active就是当前活跃的请求数(和并发连接数强相关)。你可以用监控工具收集这些数据,就能直观看到连接数是否接近worker数量 × worker connections的总上限,也能回溯历史峰值。系统级命令实时统计
用ss或netstat直接统计Gunicorn监听端口的活跃连接数,比如你的Gunicorn跑在8000端口:ss -tulnp | grep :8000 | grep ESTABLISHED | wc -l这个命令会返回当前处于已建立状态的连接数。如果要追踪历史数据,可以把这个命令做成定时任务(比如用cron),定期将结果写入日志或监控系统。
自定义WSGI中间件统计
在你的Python应用里加一个简单的中间件,维护活跃连接计数器和历史最大值:class ConnectionCounterMiddleware: def __init__(self, app): self.app = app self.active = 0 self.max_active = 0 def __call__(self, environ, start_response): self.active += 1 if self.active > self.max_active: self.max_active = self.active try: return self.app(environ, start_response) finally: self.active -= 1 # 挂载到你的WSGI应用上 app = ConnectionCounterMiddleware(your_wsgi_application)之后可以加一个内部接口,返回当前活跃数和历史峰值,比如:
# 示例Flask接口 @app.route('/connection-stats') def connection_stats(): return {"active_connections": app.active, "max_connections": app.max_active}
注意:worker connections是单worker的最大并发连接数,服务器总并发上限是worker数量 × worker connections,监控时要结合这个数值判断是否需要调整配置。
内容的提问来源于stack exchange,提问作者Johnny Metz
相关产品推荐
相关产品推荐

