在Linux系统中,查看网络连接数是系统管理和故障排查中的常见需求,连接数包括已建立的连接、监听端口、等待连接等状态,通过相关命令可以快速掌握系统网络活动情况,以下是常用的Linux查看连接数命令及其详细用法,结合实例和表格说明,帮助用户全面理解和应用。

netstat命令
netstat是传统的网络状态查看工具,功能全面,适用于大多数Linux发行版,基本语法为netstat [选项],常用选项及作用如下表所示:
| 选项 | 作用 | 示例 |
|---|---|---|
-a | 显示所有连接(包括监听和未连接的) | netstat -an |
-t | 显示TCP连接 | netstat -tn |
-u | 显示UDP连接 | netstat -un |
-l | 仅显示监听状态的连接 | netstat -ln |
-n | 以数字形式显示地址和端口(避免DNS解析) | netstat -an |
-p | 显示进程ID和进程名(需root权限) | netstat -pan |
-c | 持续动态刷新输出 | netstat -c -an |
实例分析:
- 查看所有TCP连接:
netstat -tn
输出结果中,ESTABLISHED表示已建立的连接,LISTEN表示服务正在监听端口。 - 统计当前连接数:
netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
该命令按连接状态(如ESTABLISHED、TIME_WAIT等)分类统计数量,便于快速分析网络状态。
注意:在较新的Linux发行版中,netstat可能被ss命令替代,但部分系统仍保留其兼容性。
ss命令
ss是netstat的替代工具,速度更快,功能更强大,尤其在高并发场景下表现优异,基本语法为ss [选项],常用选项如下表:

| 选项 | 作用 | 示例 |
|---|---|---|
-a | 显示所有连接 | ss -an |
-t | 显示TCP连接 | ss -tn |
-u | 显示UDP连接 | ss -un |
-l | 仅显示监听连接 | ss -ln |
-n | 数字形式显示地址和端口 | ss -an |
-p | 显示进程信息 | ss -pan |
-s | 汇总连接统计信息 | ss -s |
state | 过滤特定状态的连接 | ss state established |
实例分析:
- 查看TCP连接状态统计:
ss -s
输出包括总连接数、TCP各状态(ESTABLISHED、SYN_RECV等)的数量,适合快速概览。 - 查看某个端口的连接数:
ss -tn | grep ':80' | wc -l
统计80端口的TCP连接总数,适用于Web服务器监控。
优势:ss直接从内核获取网络信息,解析效率高,推荐优先使用。
lsof命令
lsof(List Open Files)用于列出系统打开的文件,包括网络连接,语法为lsof [选项] [文件名],常用选项如下:
| 选项 | 作用 | 示例 |
|---|---|---|
-i | 显示网络连接 | lsof -i |
-i:端口号 | 显示指定端口的连接 | lsof -i:80 |
-P | 不解析端口号为服务名 | lsof -i -P |
-n | 不解析主机名 | lsof -i -n |
实例分析:

- 查看80端口的连接详情:
lsof -i:80
输出包括进程ID、用户、连接状态等信息,适合排查端口占用问题。 - 查看所有TCP连接:
lsof -i -P -n
结合-P和-n选项,以数字形式显示所有网络连接,避免DNS解析延迟。
适用场景:当需要关联连接与具体进程时,lsof是最佳选择。
/proc文件系统
通过读取/proc/net/下的文件,可直接获取内核中的网络连接数据,适合脚本化处理。
/proc/net/tcp:TCP连接信息(十六进制格式)。/proc/net/udp:UDP连接信息。/proc/net/tcp6:IPv6 TCP连接。
实例分析:
- 统计TCP连接数:
wc -l /proc/net/tcp
输出结果减去首行标题(通常为1)即为实际TCP连接数。 - 解析IPv4 TCP连接:
cat /proc/net/tcp | awk 'NR>1 {print $3}'
提取本地和远程地址信息,需结合十六进制与IP转换工具(如ss)进一步解析。
注意:/proc文件系统内容为实时数据,适合自动化脚本,但可读性较差。
综合应用建议
- 快速统计连接数:使用
ss -s或netstat -an | wc -l。 - 排查端口占用:结合
ss -tnl | grep ':端口号'和lsof -i:端口号定位进程。 - 监控连接状态变化:使用
watch -n 1 "ss -tn"动态刷新TCP连接。 - 高并发场景:优先选择
ss,避免netstat的性能瓶颈。
相关问答FAQs
Q1: 如何查看某个进程占用的连接数?
A1: 可以使用ss -tpn | grep '进程ID或进程名'或lsof -p 进程ID | grep 'IPv4\|IPv6',查看nginx进程的连接数:ss -tpn | grep nginx,或lsof -p $(pgrep nginx) | grep 'TCP\|UDP'。
Q2: TIME_WAIT状态的连接过多如何处理?
A2: TIME_WAIT是TCP连接正常关闭的状态,但过多可能影响性能,可通过调整内核参数优化,例如临时生效执行sysctl -w net.ipv4.tcp_tw_reuse=1(允许重用TIME_WAIT套接字)或sysctl -w net.ipv4.tcp_tw_recycle=1(启用TIME_WAIT快速回收);永久生效需修改/etc/sysctl.conf并执行sysctl -p,检查应用程序是否正确关闭连接,避免频繁短连接。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/393221.html<
