服务器查看所有连接的核心方法是使用系统内置命令(如netstat、ss、lsof)或针对特定应用(数据库、Web服务器)的查询语句,这些工具能快速列出当前所有TCP/UDP连接状态、端口占用及进程信息。无论你管理的是Linux云服务器还是Windows物理机,掌握这些命令都是日常运维的必备技能,下面我从命令使用、问题排查、工具对比等角度,带你全面掌握服务器连接查看的方法。
Linux服务器查看所有连接命令详解
Linux下查看网络连接的传统命令是netstat,但现代发行版更推荐ss,两者都支持查看所有连接,但ss在大量连接时效率更高,lsof命令可以按进程或端口查看连接,适合精确定位问题。
netstat命令参数详解
netstat -anptu是最常用组合,参数含义:-a显示所有连接,-n以数字格式显示地址和端口,-p显示进程PID,-t和-u分别筛选TCP和UDP,通过管道组合,可以统计每个状态的连接数量,比如netstat -ant | awk ‘{print $6}’ | sort | uniq -c得到各状态计数,需要管理员权限时,加sudo。
在实际场景中,当排查应用端口冲突时,运行netstat -anptu | grep 8080,很快就能看到LISTEN和ESTABLISHED状态,从而判断服务是否正常,如果发现大量SYN_RECV状态,可能遭受了SYN攻击,netstat -r可以查看路由表,netstat -i查看接口统计。
netstat的缺点是在连接数巨大时执行缓慢,甚至可能耗尽CPU,在生产环境建议使用ss。
ss命令的高效之处
ss命令语法类似,但输出更快,常用参数:
- ss -tuln:显示所有监听端口
- ss -ant state established:显示所有已建立连接
- ss -s:提供整体统计,包括TCP、UDP、RAW等
- ss -ant src 192.168.0.1:按源地址过滤
在高并发服务器上,ss是netstat的替代者,行业共识认为,ss在连接数超过5000时性能优势明显,使用ss -ant | grep -c 80可以快速统计端口80的连接数,对于连接状态分析,ss -t state established可以筛选已建立连接,方便定向监控,ss还支持多种过滤表达式,如ss -ant state time-wait。
lsof按进程定位连接
lsof -i列出所有网络连接,lsof -i :80显示端口80的连接,当需要知道哪个进程占用特定端口时,lsof -i :80 | grep PID,lsof也支持查看用户关联的连接,对于多用户服务器非常有用,lsof -i -u root可以查看root用户的所有网络连接。
Windows服务器查看所有连接方法
Windows服务器同样强大,但命令和工具与Linux不同,最常用的是netstat命令和资源监视器图形工具。
netstat -anb基础命令
在cmd中运行netstat -anb,-b参数显示进程名称,但需要管理员权限,且输出较慢,替换为netstat -ano则只显示PID,速度更快,然后通过任务管理器查看对应进程,在排查端口占用时,netstat -ano | findstr :8080定位到PID,再到任务管理器找到进程名称,如果需要在Windows上查看类似Linux的ss功能,可以安装Windows Sysinternals套件中的TCPView,提供图形化连接查看。
资源监视器图形化查看
打开任务管理器,点击性能选项卡,下方打开资源监视器,在网络选项卡中,可以按图像、TCP连接、监听端口等分类查看,双击某个进程可以查看其所有连接,非常适合快速定位异常连接,当服务器查看所有连接时发现某个进程连接数异常高,可以在此界面直接结束进程或进一步分析。
PowerShell高级查询
PowerShell的Get-NetTCPConnection模块提供了更丰富的过滤功能。
- Get-NetTCPConnection -State Established | Format-Table
- Get-NetTCPConnection -State Established | Group-Object RemoteAddress | Sort-Object Count -Descending
对于批量管理,脚本化操作更高效,PowerShell 还支持Get-NetUDPEndpoint查看UDP连接。
服务器查看所有连接工具对比:netstat vs ss
netstat和ss是最常用的两个工具,但它们在性能、功能上有差异,下面用表格对比。
| 对比维度 | netstat | ss |
|---|---|---|
| 性能 | 连接数多时慢 | 快,处理大量连接高效 |
| 依赖 | net-tools包 | iproute2包(默认安装) |
| 功能 | 基本统计 | 更详细的状态过滤 |
| 输出可读性 | 传统格式 | 更简洁但需习惯 |
| 适用场景 | 临时使用 | 生产环境推荐 |
在大多数Linux发行版中,ss已经替代netstat成为默认工具,但netstat仍然广泛使用,因为很多老教程还在用,业内专家指出,新部署的服务器建议直接使用ss,以获得更好的性能和更丰富的功能。
除了这两个,lsof作为补充工具,在按进程排查时不可或缺,Windows平台则主要依赖netstat和资源监视器,对于全连接查看,选择工具时应根据具体场景和操作系统。
服务器查看所有连接在性能优化中的应用
通过查看所有连接,可以了解服务器当前负载和连接健康度,相当一部分服务器性能问题与网络连接异常有关。
通过连接数判断负载
使用ss -s或netstat -s查看整体统计,如果已建立连接数持续增长,可能表示应用压力大或存在连接泄漏,单台服务器连接数在数万到数十万级别,但具体取决于硬件和应用,当连接数接近系统上限时,会出现连接超时或拒绝新连接,此时需要查看系统配置,如Linux的fs.file-max和net.ipv4.tcp_max_tw_buckets。
数据库连接查看
对于MySQL,使用show processlist;查看当前连接;对于PostgreSQL,使用select from pg_stat_activity;,在连接池设置中,查看所有连接可以帮助调整最大连接数,避免资源浪费,如果发现大量连接处于Sleep状态,可能需要调小连接超时时间,通过查看数据库连接,可以判断应用层是否合理使用连接池。
Web服务器连接查看
Nginx和Apache都提供状态页面,可以查看活动连接数,结合ss命令,可以确认真实连接数与配置是否一致,配置Nginx状态页时,在server块中添加location /nginx_status { stub_status on; },然后通过curl http://localhost/nginx_status获取连接信息,Apache的mod_status模块提供类似功能,通过对比Web服务器状态和系统级连接,可以排查多层架构下的连接瓶颈。
掌握服务器查看所有连接的方法,能让你在运维中快速定位问题、优化性能,无论是Linux的ss还是Windows的资源监视器,选择适合你场景的工具才是关键。
Q&A:服务器查看所有连接常见疑问
问:服务器查看所有连接命令是什么?
答:Linux上推荐使用ss命令,其次netstat;Windows上使用netstat -anb或PowerShell的Get-NetTCPConnection,针对数据库,MySQL使用show processlist,PostgreSQL使用pg_stat_activity,具体命令可根据操作系统和需求选择。
问:服务器查看所有连接时卡顿,如何排查?
答:首先确认连接数是否过大,使用ss -s查看总数,如果连接数超过系统预期,检查是否有大量TIME_WAIT或CLOSE_WAIT状态,根据情况调整内核参数如tcp_tw_reuse(适当调整)或优化应用代码,如果卡顿是由于命令本身执行慢,建议使用ss代替netstat,同时检查系统资源如CPU、内存是否正常。
问:服务器查看所有连接工具对比哪个好?
答:netstat和ss功能相似,但ss性能更好,推荐在新系统上使用,lsof适合按进程定位,资源监视器适合Windows图形化查看,选择工具时应根据具体场景和操作系统,ss是目前Linux环境下最高效的全连接查看工具。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/524770.html



