游乐游手机版
首页/系统平台/文章详情

Linux系统下Nginx连接池当前状态完整查看方法详解

时间:2026-07-10 07:15
检查Nginx连接池状态需访问 nginx_status端点,前提是编译并配置ngx_http_stub_status_module。页面显示Activeconnections、accepts handled、Reading Writing Waiting等。也可用ss命令统计TCP连接,重点关注TIME_WAIT数量。

排查 Nginx 连接池状态时,最直接的方法就是检查 /nginx_status 端点。然而,很多人在配置完成后,满心期待地访问,却只看到 404 或 403 错误,令人困惑。问题通常出在两个地方:一是 Nginx 编译时未包含 ngx_http_stub_status_module 模块,二是配置细节出现遗漏。

验证模块是否已启用,一条命令即可搞定:直接运行 nginx -V 2>&1 | grep -o with-http_stub_status_module。如果有输出,说明模块已就绪;若没有输出,则需要重新编译 Nginx,或更换软件包。例如,在 Ubuntu 下,nginx-full 通常自带该模块,而轻量级的 nginx-light 则不包含。

假设模块确认存在,配置也写好了,但仍然无法访问?那多半是忽略了以下三个细节中的至少一个。

配置 /nginx_status 时最容易忽略的三件事

第一,stub_status on; 这条指令必须放置在 location 块内才能生效。如果写在 server 块或 http 块中,Nginx 会直接忽略。第二,访问控制的 allowdeny 指令顺序绝不能颠倒。如果写成 deny all; allow 127.0.0.1;,那么所有请求都会被拒绝,因为 Nginx 会按顺序逐条检查规则。正确的做法是:先写 allow,再写 deny all。第三,检查监听地址是否匹配。很多服务器上运行着多个 server 块,都监听 80 端口。如果你只在其中一个块中配置了 /nginx_status,而你访问的域名恰好命中另一个块,自然就会返回 404。

好,配置搞定后,来看看通过 curl 访问 /nginx_status 返回的信息到底说明了什么。

看懂 status 页面上的几个关键数值

成功访问后,你大概会看到类似下面的输出:

Active connections: 12
server accepts handled requests
 123456 123456 234567
Reading: 2 Writing: 5 Waiting: 5

其中,Active connections 表示当前所有活跃的 TCP 连接数——它包括了正在读取请求头的连接、正在写响应的连接,以及处于 keepalive 空闲状态等待新请求的连接,并非单纯的并发请求数。而 acceptshandled 这两个数值,分别代表 Nginx 启动以来接受的连接总数和成功处理的连接数。如果两者相等,说明 Nginx 从未拒绝过连接,这是一个不错的信号。

下面三行则更具实时性:Reading 表示 Nginx 正在读取请求头的连接数,Writing 表示正在向客户端发送响应的连接数,而 Waiting 是最容易被忽视的——那些已经处理完请求、仍在 keepalive 中等待下一个请求的空闲连接。这三个数字能直接反映当前连接池的“心跳”节奏。

即使没有 stub_status,也能大致判断压力状况

当然,有些场景下你无法修改配置,或者模块无法安装。这时,系统级命令也能帮你粗略估算压力。例如,使用 ss -ant 'sport = :80' | wc -l 来统计 80 端口上的 ESTABLISHED 连接,速度比 netstat 快得多。也可以更精确地过滤出与 Nginx 相关的连接:ss -ant state established '( sport = :80 or dport = :80 )' | wc -l

另外,TIME_WAIT 的数量值得特别关注。用 ss -ant state time-wait '( sport = :80 or dport = :80 )' | wc -l 看一眼,如果这个值长期高于 2000,说明短连接过于频繁,就需要考虑调优 keepalive_timeout,或者排查客户端是否存在问题。

这里需要特别说明:ss 统计的是内核级别的 TCP 状态,与 stub_status 中的 Active connections 虽然接近,但并不完全等价。因为 stub_status 还包含了那些处于 keepalive 空闲状态但尚未断开连接,而 ss 仅反映内核中实际的连接状态。

实际上,观察连接池压力时,最重要的不是盯着某个绝对数值,而是关注比例。真正有价值的是 WaitingActive connections 的百分比。如果这个比例长期低于 10%,说明 keepalive 机制基本没有发挥作用,连接用完就断,白白浪费了握手开销。如果长期高于 80%,则问题可能更大——要么是后端响应太慢,导致请求排队;要么是客户端请求过于频繁,使大量连接卡在 Waiting 状态无法释放。这才是需要警惕的信号。

Linux怎么查看Nginx当前的连接池状态

来源:https://www.php.cn/faq/2794654.html
上一篇Linux如何查看网卡中断绑定情况的详细教程 下一篇如何在Linux中配置具体安全加固项的操作步骤
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
如何用Linux查看网络数据包在内核的流向
系统平台 · 2026-07-10

如何用Linux查看网络数据包在内核的流向

tcpdump在链路层入口后、IP层解析前捕获,可看到MAC地址等头部;perf配合kprobe可跟踪skb在内核中的函数调用路径; proc net snmp等文件通过协议栈丢包计数反映流向瓶颈;iptablesTRACE仅在netfilter钩子打日志,不适合追踪真实流向。需交叉验证多种工具。

如何在CentOS 7中修改文件系统配额的具体操作步骤
系统平台 · 2026-07-10

如何在CentOS 7中修改文件系统配额的具体操作步骤

修改XFS文件系统配额时,需先在 etc fstab挂载点启用uquota或gquota选项,然后重新挂载文件系统使配额生效。之后以xfs_quota-x专家模式为用户或组设置软硬限制。修改后务必执行report命令验证,并检查输出确保限制值已写入且用量被正确统计。

Linux查看具体硬件驱动列表的命令
系统平台 · 2026-07-10

Linux查看具体硬件驱动列表的命令

在Linux系统中,查看硬件驱动列表,可使用lsmod命令查看已加载模块(但内置驱动不显示),使用lspci-k命令查看PCI设备当前驱动,使用lsusb-t命令查看USB设备驱动。需特别注意驱动与固件缺失问题,使用dmesg|grepfirmware命令可辅助排查驱动和固件缺失。

电脑0x800401f3无效类字符串系统底层报错解决
系统平台 · 2026-07-10

电脑0x800401f3无效类字符串系统底层报错解决

错误0x800401f3无效的类字符串,因系统找不到COM组件注册信息或权限不足导致。需先定位出错组件的ProgID,检查注册表HKEY_CLASSES_ROOT下对应项是否存在,若缺失则使用regsvr32命令重新注册对应的DLL文件,再修改ProgID及CLSID子项的权限,赋予Everyone完全控制,最后重启IIS服务或相关应用程序池使更改生效。

统信UOS更换系统图标包详细教程
系统平台 · 2026-07-10

统信UOS更换系统图标包详细教程

统信UOS更换系统图标包可通过三种途径实现:控制中心直接切换已安装主题、手动复制图标包至用户目录并更新缓存、使用深度商店一键安装。三种方式分别适合不同技术能力的用户,均能即时生效,提升操作效率与视觉体验。