如何查看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/%e5%a6%82%e4%bd%95%e6%9f%a5%e7%9c%8bweb%e6%9c%8d%e5%8a%a1%e5%99%a8%e8%bf%9e%e6%8e%a5%e6%b1%a0%e5%89%a9%e4%bd%99%e9%87%8f%ef%bc%9f%e8%bf%9e%e6%8e%a5%e6%b1%a0%e8%80%97%e5%b0%bd%e4%bc%9a%e6%80%8e/

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

相关推荐

  • 珠海备用DNS服务器有哪些,如何快速设置?

    珠海备用的DNS服务器通常推荐使用114.114.114.114和223.5.5.5,这两个公共DNS在华南地区延迟低、稳定性好,适合作为主DNS的故障切换方案,如果你在珠海使用宽带拨号上网,运营商默认分配的DNS偶尔会出现解析缓慢或页面打不开的情况,手动配置备用DNS能明显改善,下面从实战角度讲清楚选哪个、怎……

    2026年10月11日
    100
  • MEC边缘计算服务器多少钱,边缘计算服务器租用一年多少钱?

    MEC边缘计算服务器的采购价格并没有一个固定数值,基础配置的月付成本通常在500元至2000元区间,而满足生产环境的中高端配置,年预算则普遍落在3万至15万元之间,相比一次性买断硬件,现阶段多数企业更倾向于选择按需付费的边缘节点服务,以规避硬件迭代风险,一套MEC边缘计算服务器的真实成本由哪些部分构成很多第一次……

    2026年10月20日
    200
  • Linux发包流程是怎样的?Linux网络数据包发送原理

    Linux发包的核心流程是:数据包从应用层生成后,经内核协议栈层层封装,通过路由查找确定出口网卡,最终由网卡驱动硬件发送;若需加速,可借助DPDK或XDP技术绕过内核网络栈,理解Linux网络发包机制,不能仅停留在“点击发送”这一表象,这背后是一套精密协作的系统工程,涉及用户空间、内核空间以及硬件驱动的深度交互……

    2026年7月8日
    3010
  • 云服务器5M带宽究竟能支持多少人,够用吗

    5M带宽的云服务器,在合理优化下,可以支撑日均数百到数千的IP访问,并发人数通常在50-500人之间,具体取决于业务类型,这个数字并非凭空而来,而是基于HTTP协议传输特性、网页对象大小以及用户访问行为模型综合计算得出的行业共识,理解这个范围背后的逻辑,比记住一个固定数字更重要,因为它直接关系到你的服务器配置成……

    2026年7月27日
    1000
  • Web服务器默认端口号是多少,80端口是什么?

    web服务器的默认端口号:HTTP是80,HTTPS是443, 浏览器在地址栏里默认帮你省略了这个数字,实际访问时仍会按IANA服务名称与传输协议端口号注册表的约定去连接,默认端口从哪里来:80和443为什么成了Web入口端口可以理解成服务器上的“门牌号”,IP地址负责找到哪台机器,端口负责找到机器上的哪个服务……

    2026年10月4日
    000
  • 谷歌服务器到底有多少台?,真实数量超乎想象吗?

    谷歌服务器一共多少台?没有官方精确数字,按公开数据中心、云区域、机架密度和采购量级推算,全球范围通常被行业放在“数百万台”这个量级,但不同估算口径能差出很大一截,谷歌为什么不公布服务器总数服务器数量是云厂商的基础设施底牌谷歌、微软、亚马逊这类超大规模云厂商,财报里常见的是营收、资本开支、云区域、可用区、能效目标……

    2026年10月11日
    100
  • 红联Linux是什么系统,红联Linux怎么下载安装?

    红联Linux(Linux Eden)作为国内老牌Linux技术社区,其核心价值在于沉淀了大量针对国产Linux生态的实战经验、技术文档及故障解决方案,是新手入门与进阶开发者获取本土化技术支持的重要知识库,红联Linux论坛怎么样?社区生态与技术价值深度解析在开源软件蓬勃发展的今天,红联Linux(Linux……

    2026年7月12日
    15100
  • SCUM联机还得买服务器吗,大概多少钱?

    SCUM联机得买服务器吗?答案分两层:玩官方服务器一分钱不花,想自己开私人服或租第三方服务器,每月几十元到两三百元不等, 这笔钱不是给游戏官方的,而是花在硬件、带宽和维护上,下面把费用构成、价格区间和避坑要点一次说清,SCUM服务器钱花在哪里SCUM这款生存沙盒游戏,单图最多容纳64人同时在线,服务器承载压力不……

    2026年9月25日
    100
  • 江西上饶移动dns的服务器地址是多少?,手机怎么设置

    江西上饶移动DNS服务器首选地址是211.137.191.26(主)和211.137.190.26(备),但更推荐用户优先配置江西上饶移动专属DNS:211.137.191.26与211.137.190.26,同时结合路由器自动获取模式使用,可有效降低游戏延迟与网页劫持概率,为什么上饶移动DNS直接影响你的网速……

    2026年8月20日
    800
  • 战地5服务器到底有多少个?,战地5服务器数量怎么查?

    战地5没有一个对外公布的固定服务器总数,你在游戏里能看到的服务器数量是动态的,取决于平台、地区、时段、官方匹配池和社区服/租用服的在线情况, 想查当前数量,最直接的办法是打开游戏内服务器浏览器,按地区、模式、空位和延迟筛选后刷新列表,战地5服务器数量为什么查不到一个固定数字官方服务器是动态调度,不是固定台数战地……

    相关资讯 2026年11月4日
    000

发表回复

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