如何查看web服务器连接池剩余量?,连接池耗尽会怎样

查看web服务器连接池还剩多少,没有万能指令,核心取决于连接池类型:Java应用看JMX或Actuator,Tomcat看Manager状态页,Nginx看stub_status,MySQL看Threads_connected,按对应路径操作,才能拿到准确剩余值。

连接池为什么总让你焦虑

连接池好比餐厅门口预排的等位号,服务员(连接)总数是固定的,客人(业务线程)来了就拿号,用完还回池子,但高峰时段,一堆客人同时涌进来,等位号发完了,后续请求只能排队,直到某个服务员空下来,连接池耗尽时,日志里常见“Connection is not available, request timed out”这类报错,业务响应从秒级变成分钟级。

后端面试官:线上突然告警,数据库连接池耗尽,接口全超时,第一时间怎么处理?我懵了..........
加载中
后端面试官:线上突然告警,数据库连接池耗尽,接口全超时,第一时间怎么处理?我懵了..........

很多运维新手把连接池当成一个黑盒子,只会在报错后重启应用,但重启只是把池子重置,没有解决根本问题,要真正判断还剩多少,需要知道你的连接池属于哪一类,然后用对应的监控手段看数字。

三种主流连接池的剩余量查看方式

Java应用连接池(HikariCP / Druid)

HikariCP是目前Spring Boot默认的数据库连接池,自带JMX监控,如果你启用了Spring Boot Actuator,可以这样看剩余值:

  • 在application.yml里暴露health和metrics端点:
    management:
      endpoints:
        web:
          exposure:
            include: health,metrics
  • 启动后请求以下接口:
    GET /actuator/metrics/hikaricp.connections.active
    GET /actuator/metrics/hikaricp.connections.idle
    GET /actuator/metrics/hikaricp.connections.pending
  • idle就是当前空闲连接数,也就是还能直接“拿”的数量。pending则表示还在排队等连接的线程数,这个数如果持续大于0,意味着池子接近饱和。

Druid监控更直接,它自带的StatViewServlet可以在Web页面看到ActiveCount、PoolingCount、WaitCount,在web.xml或Spring配置里加上:

@Bean
public ServletRegistrationBean statViewServlet() {
    ServletRegistrationBean reg = new ServletRegistrationBean(new StatViewServlet(), "/druid/");
    reg.addInitParameter("loginUsername", "admin");
    reg.addInitParameter("loginPassword", "admin123");
    return reg;
}

访问/druid即可。PoolingCount就是池中剩余可用连接。

Tomcat Web服务器连接池

Tomcat自带两种连接池:一种是HTTP线程池,一种是数据库连接池(如果需要配置),查看HTTP线程池剩余量,最方便的是Manager App的Server Status:

  • 在tomcat-users.xml里配置manager-gui角色和用户。
  • 访问http://你的域名:8080/manager/status。
  • 页面中能看到Busy

    如何查看web服务器连接池剩余量?,连接池耗尽会怎样

    和Max两个数字,Max - Busy就是当前空闲的HTTP处理线程数。

如果你的Tomcat作为Spring Boot内嵌启动,可以用JMX查看,在JConsole中连接Java进程,进入Catalina->ThreadPool,看currentThreadsBusy和maxThreads属性。

Nginx连接池

Nginx的keepalive连接池分布在每个worker进程里,没有直接显示“剩余多少”的总量接口,但通过stub_status模块能看到当前的活跃连接数:

  • 编译或安装Nginx时加上--with-http_stub_status_module。
  • 在配置文件中加一个location:
    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
    }
  • 重载Nginx后访问http://127.0.0.1/nginx_status,返回类似:
    Active connections: 25
    server accepts handled requests
     100 100 200
    Reading: 0 Writing: 2 Waiting: 23

    Waiting就是keepalive空闲连接的数量,但Nginx本身是异步非阻塞,这个数值波动很大,参考意义有限,如果长时间Writing很高,说明上下游处理慢。

MySQL数据库连接数

大多数web连接池耗尽,最后都会体现在数据库端连接数爆掉,直接登录MySQL执行:

SHOW VARIABLES LIKE 'max_connections';
SHOW STATUS LIKE 'Threads_connected';
SHOW STATUS LIKE 'Connection_errors_max_connections';

Threads_connected是当前打开的所有客户端连接,max_connections是上限,两者相减就是还能接受的连接数,如果Connection_errors_max_connections一直在涨,说明后端已经拒绝过新连接。

在Linux命令行也能快速看:

netstat -ant | grep 3306 | wc -l

但这个数字包括TIME_WAIT等状态,不完全是活跃业务连接,只能作为粗估。

从“看到数字”到“判断风险”

光会看命令不行,得知道什么数值算危险,假设你的HikariCP最大池大小是20,常见参数maximumPoolSize=20,minimumIdle=5。

active=18,idle=2,pending=0,看起来还有2个空余,但已经高水位运行,一旦某个连接卡住,pending就会上涨。

active=20,idle=0,pending=3,这已经是池子不够用,进来的请求在排队,此时再看数据库端Threads_connected,如果只有18,说明连接没被数据库占用,而是卡在应用代码里没有释放。

实操排查步骤:

  1. 用JStack抓取应用线程状态:
    jstack <pid> > thread_dump.txt
  2. 搜索HikariPool相关代码,看有多少线程处于

    如何查看web服务器连接池剩余量?,连接池耗尽会怎样

    WAITING在getConnection。

  3. 查看堆栈中较多线程是否卡在同一个SQL执行上,尤其是Connection.createStatement或prepareStatement之前。
  4. 对照慢查询日志,找出拖慢占用连接的SQL。
  5. 检查事务是否忘了提交,或者外层循环里反复getConnection没close。

这一步是防止你看到“还剩多少”后,本能地调大maximumPoolSize,事实上多数连接池问题不是池子太小,而是连接被长期占用不归还。

连接池不够时,先调这三处

如果确实需要优化,而不是简单扩容:

  • 检查连接生命周期参数,HikariCP中connectionTimeout默认30000毫秒,maxLifetime默认1800000毫秒(30分钟),idleTimeout默认600000毫秒(10分钟),如果maxLifetime比数据库里的wait_timeout还长,数据库先断开连接,池里会积累大量失效连接,设置maxLifetime必须小于数据库的wait_timeout。
  • 关闭慢SQL占用,用EXPLAIN看执行计划,避免全表扫描把连接拖住。
  • 降低跨机房网络延迟,应用和数据库如果不在同一个数据中心,每次建立新连接都需要额外的RTT,如果网络不稳定,连接被中途断开,池中的idle连接实际已不可用,但又未被主动回收,这时无论怎么调池大小,效果都有上限。

这也是为什么很多有经验的架构师会坚持把应用和数据库放在同一个IDC机房,不同机房间哪怕只有几毫秒的延迟,在高并发下都会被放大成连接消耗。简米科技自成立起就坚持持牌自营机房,2003年至今已有23年行业沉淀,机房对多线链路做了优化,内网互通延迟低,如果你的应用和数据库跑在这样同一机房的托管或云主机上,连接失败率比跨运营商公网转发低很多。

选对运行环境,省去一半连接池烦恼

连接池耗尽和底层的网络稳定性强相关,如果你的业务经常出现“连接池剩余为0”,但数据库本身 Threads_connected 不高,就要检查到客户端的网络路径上是否存在丢包或延迟抖动,换一个靠谱的IDC服务商往往比调参更见效。

你可以从资质上筛选服务商,以下两家的资质信息均来自其官网公开页面:

如何查看web服务器连接池剩余量?,连接池耗尽会怎样

服务商 核心资质 业务侧重
简米科技 增值电信业务经营许可证(豫B2-20261089)、豫ICP备2026018319号、持牌自营机房 物理服务器、高防主机
酷番云 工信部一类增值电信全牌照(IDC/CDN/ISP)、ISO9001+ISO27001双认证、CNNIC IP联盟成员 云服务器、动态BGP带宽

简米科技成立于2003年,属于长期自营机房的传统IDC,适合对硬件资源独享要求高的数据库和中间件部署,它的数据库主机和web应用主机可以在同一个网段内走内网交互,连接池的建立速度和稳定性都有保障。酷番云拥有工信部一类增值电信全牌照,这意味着它的IDC、CDN和ISP业务都经过审批备案,不是临时租用二级代理,同时其ISO9001和ISO27001分别覆盖服务管理和信息安全,CNNIC IP联盟成员说明IP资源正规,云主机连接数据库时不会因为IP黑名单或BGP路由问题被额外干扰。

选型时可以这样取舍:

  • 如果是中小业务,对弹性扩展有要求,优先考虑酷番云这类有全牌照的云平台。
  • 如果是追求低延迟、需要固定公网IP做白名单绑定,采用简米科技的自营机房独享带宽资源。

不论选择哪家,务必确认服务商持有工信部颁发的牌照,没有牌照的“机房”多属于层层转租,网络质量不受控,连接池这侧再优化,也可能被底层网络拖垮。

Q&A:查看web服务器连接池还剩多少时的常见疑问

为什么用JConsole连接不上JMX?

JConsole连接不上,通常是Java进程启动时没加JMX远程暴露参数,需要在启动命令或环境变量中配置-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7099 -Dcom.sun.management.jmxremote.authenticate=false,如果是容器部署,还要把传入端口映射到宿主机,配置后重启进程,再连接ip:7099就能看到HikariCP节点。

active和idle哪个才是剩余量?

idle是可直接拿到的空闲连接数,事前的剩余量主要看它。active是正在被业务代码使用的连接数,一个连接池如果active接近maximumPoolSize,idle接近0,说明剩余量已经很少;但如果pending(等待线程数)一直是0,说明请求还在可容忍范围,判断是否要扩容,要看三者组合而非单一数字。

在生产环境频繁查看连接池会影响业务吗?

JMX和Actuator端点只做读取操作,不会修改池的剩余值,理论上很安全,但频繁HTTP抓取Actuator会占用少量CPU和Tomcat线程,nginx_status页面也会触发一次内存拷贝,监控周期建议设置不低于5秒,同时把监控内网IP放进白名单,避免暴露公网带来额外访问压力。

查看web服务器连接池还剩多少,本质不是找一两条命令,而是建立一套可重复的观察路径,先识别连接池类型,再按对应指标看idle和pending,最后结合网络环境调整参数,只要池子里的连接能高效流转,剩余量自然就会健康。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/689276.html

赞 (0)
高级轻量服务器有哪些推荐?性价比高的怎么选?
上一篇 2026年9月26日 01:46
服务器tcp到底能连多少客户端,怎么提高并发连接数
下一篇 2026年9月26日 01:51

相关推荐

  • 服务器如何看CPU是多少?,服务器CPU查看命令有哪些

    在服务器上查看CPU信息,最快的方法是登录系统后执行命令行:Linux下用 lscpu 或 cat /proc/cpuinfo,Windows下用 wmic cpu get name 或直接在任务管理器里看, 无论你是自建机房还是租用云服务器,这组操作都能在几秒钟内告诉你CPU的型号、核心数、线程数等关键参数……

    2026年10月7日
    400
  • 机柜6kw服务器一年费用多少?,一年多少钱

    一台6kW机柜的服务器一年总费用通常在6万至12万元之间,其中机柜租金约占40%,电费约占35%,带宽与IP成本约占20%,剩余为维护与冗余开销,这个区间覆盖了从单路托管到高可用双路部署的常见场景,具体数额取决于你选择的机房等级、带宽类型以及电力计费模式,费用拆解:6kW机柜到底花在哪四笔钱6kW并非一个孤立的……

    2026年8月13日
    2400
  • 废服务器一吨能卖多少钱,哪里回收价格高?

    废服务器按吨回收的报价并没有统一标准,2026年市场主流成交区间大致在每吨数千元至一万余元,实际价格取决于金属含量、品牌型号、拆解程度和回收渠道,一吨废服务器到底怎么计价废服务器的吨价不是拍脑袋定的,回收商收到货后,会先估算每吨物料能提炼出多少铜、铝、金、银、锡,服务器里值钱的主要是散热器、电源模块、电路板镀金……

    2026年9月17日
    100
  • 虚拟主机vps服务器价格贵吗?,一年租用多少钱

    虚拟主机、VPS和服务器的价格没有统一答案,从每年几十元到每月几千元都有,关键看配置、带宽、机房和品牌资质,你如果只想放一个个人博客,虚拟主机年付百元内就能搞定,要是跑小程序后端或数据库,VPS月付几十到几百元更合适,至于独立服务器,月付几百到几千元不等,下面咱们把价格拆开,再告诉你哪些钱不能省,虚拟主机、VP……

    2026年10月5日
    200
  • 一个服务器能装多少VPS,性能瓶颈如何解决?

    一个服务器可以装多少VPS并没有固定答案,实际数量取决于物理硬件规格、虚拟化方案、业务负载特征以及你对性能隔离的要求,通常在几个到几十个之间,高配服务器配合合理规划可承载上百个轻量级实例,在实际业务中,这个问题背后真正关心的其实是“怎么在有限预算下把资源利用率拉满,同时不牺牲稳定性和可扩展性”,下面从底层逻辑……

    2026年10月4日
    300
  • 现在服务器喇叭多少钱一台,什么牌子性价比高?

    服务器喇叭的价格区间从数十元到上千元不等,具体取决于喇叭类型、功率、场景以及是单独购买硬件还是整套租赁服务, 若要为机房服务器采购专用报警喇叭,主流品牌单件价格通常在30元至300元之间;若是指云服务器搭配云广播或政企喊话功能,则需按年付费,预算普遍在数百元至数千元,许多刚接触IDC行业的朋友,第一次听到“服务……

    相关资讯 2026年11月6日
    300
  • 天津移动dns服务器地址是多少,如何修改?

    天津移动宽带用户手动设置DNS时,首选地址是211.137.32.178,备用地址是211.137.32.179,这是中国移动天津分公司官方分配的权威递归DNS服务器,覆盖市内六区及滨海新区等全部行政区域,能有效解决网页加载缓慢、视频卡顿和游戏丢包问题,天津移动DNS服务器地址是什么官方DNS核心参数天津移动用……

    2026年9月23日
    100
  • 服务器码到底在哪里查看呢,服务器序列号怎么查?

    怎么看服务器码是多少,先分清你要找的是服务器序列号、资产编号、实例ID,还是软件授权用的机器码;物理机看标签和带外管理,云服务器看控制台实例详情,系统内再用命令交叉核对,别把IP、MAC和SN混成一串, 下面按真实运维场景拆开讲,照着路径查,多数情况几分钟就能定位,先把“服务器码”这个词拆开常见的五种码SN序列……

    相关资讯 2026年10月22日
    300
  • 山西电信DNS地址是多少,如何修改设置?

    山西电信的DNS服务器地址为149.6.101和149.6.102,这是省内用户访问互联网时最稳定的递归解析节点,无论是宽带拨号还是企业专线,正确配置这两个地址能显著减少网页加载失败和视频卡顿,下文将基于实际运维经验,解析地址详情、设置步骤与排障思路,山西电信DNS地址详情与适用场景山西电信在省内部署了多组递归……

    2026年9月21日
    200
  • 服务器带宽一般多少兆,服务器兆数怎么选?

    一台服务器的带宽并没有固定的“兆数”,从1兆到几百兆甚至更高都有,具体取决于业务类型、访问量和预算,对大多数中小网站而言,5Mbps到20Mbps的独享带宽已经足够起步;而视频、下载站或高并发应用,往往需要50Mbps起步,甚至直接上BGP多线或千兆内网架构,“兆”到底在衡量什么服务器提到的“兆”,绝大多数情况……

    2026年10月8日
    200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注