nginx反向代理java应用时,应通过stub_status和vts模块监控其与java的通信状态:stub_status提供全局连接数,vts按upstream展示各java节点的active连接、health状态及响应指标,并结合netdata/prometheus实现告警,再联动java日志与线程、gc等指标交叉验证瓶颈。

Java 应用通过 Nginx 反向代理部署时,Nginx 本身不感知 Java 进程状态,但可通过其内置或扩展的状态模块,实时观测面向 Java 后端的连接行为——重点看活跃连接数、请求分发、上游健康状态等。核心不是监控 Java,而是监控 Nginx 如何与 Java 通信。
确认并启用 stub_status 模块(基础连接数)
该模块默认已包含在主流发行版(如 nginx.org 官方包、Ubuntu/Alpine 的 apt/apk 包)中,无需重新编译:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 运行 nginx -V 2>&1 | grep -o with-http_stub_status_module,有输出即表示支持
- 在 http 或某个 server 块中添加位置配置,例如:
location /nginx-status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
} - 重载配置:nginx -t && systemctl reload nginx
- 访问 curl http://localhost/nginx-status,返回类似:
Active connections: 24
server accepts handled requests
12890 12890 45678
Reading: 0 Writing: 3 Waiting: 21
其中 Active connections 是当前所有客户端到 Nginx 的总连接数;Waiting 高通常说明 Java 后端响应慢或连接池不足
用 nginx-module-vts 查看 Java 后端节点真实活跃度
stub_status 只给全局数据,无法区分哪个 Java 实例在扛流量。vts 模块可按 upstream 精确展示每个 Java 节点的实时连接和健康状态:
- 确保 Nginx 已编译含 vts 模块:nginx -V 2>&1 | grep -o with-http-vts-module
- 在 http 块开头添加:
vhost_traffic_status_zone; - 为 upstream 配置健康检查(关键!否则 vts 无法识别节点是否真“活跃”):
upstream java_backend {
server 10.0.1.10:8080;
server 10.0.1.11:8080;
check interval=3 rise=2 fall=3 timeout=1; # 使用 nginx-plus 或第三方 check 模块
} - 新增 status server:
server {
listen 8080;
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
allow 127.0.0.1;
deny all;
}
} - 访问 http://localhost:8080/status → Upstreams → java_backend,即可看到每个 Java 节点的:
– Active:当前正向该节点转发的连接数(真正反映负载)
– Health:up/down(依赖健康检查配置)
– Requests 和 Responses:验证请求是否成功抵达 Java
对接 Netdata 或 Prometheus 实现持续可观测
人工查页面效率低,建议接入轻量级监控工具自动采集:
-
Netdata:默认启用
nginxvts收集器,只要 vts 的 /status?format=json 可达,就能自动拉取指标。重点关注:
–nginxvts.upstream.server.active(各 Java 节点实时连接)
–nginxvts.upstream.server.responses_5xx(Java 报错率)
–nginxvts.connections.active(Nginx 全局压力) -
Prometheus:配合 nginx-lua-prometheus 或 nginx-prometheus-exporter,将 vts JSON 转为 Prometheus 格式。告警规则可设:
– 当某 Java 节点nginx_vts_upstream_server_active{upstream="java_backend"} == 0持续 1 分钟 → 触发节点失联告警
–rate(nginx_vts_upstream_server_responses_5xx[5m]) > 0.05→ Java 应用异常率超 5%
结合 Java 日志交叉验证连接异常
Nginx 状态正常 ≠ Java 正常。例如:
– Nginx 显示 Active 连接高、Waiting 多,但 Java 日志无新请求记录 → 可能是 keep-alive 连接堆积,Java 线程池满或 GC 卡顿
– vts 中某节点 Health 为 up,但 Active=0、Requests 不增长 → Java 进程假死,仍能响应健康检查但拒绝业务请求
建议同步采集 Java 应用的 线程数、GC 时间、HTTP 服务端口连接数(netstat -an | grep :8080 | wc -l),与 Nginx 状态比对,定位瓶颈在 Nginx 层、网络层还是 Java 层
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










