菜鸟科技网

Linux查看连接数有哪些常用命令?

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

Linux查看连接数有哪些常用命令?-图1
(图片来源网络,侵删)

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

实例分析

  1. 查看所有TCP连接:netstat -tn
    输出结果中,ESTABLISHED表示已建立的连接,LISTEN表示服务正在监听端口。
  2. 统计当前连接数:netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
    该命令按连接状态(如ESTABLISHEDTIME_WAIT等)分类统计数量,便于快速分析网络状态。

注意:在较新的Linux发行版中,netstat可能被ss命令替代,但部分系统仍保留其兼容性。

ss命令

ssnetstat的替代工具,速度更快,功能更强大,尤其在高并发场景下表现优异,基本语法为ss [选项],常用选项如下表:

Linux查看连接数有哪些常用命令?-图2
(图片来源网络,侵删)
选项 作用 示例
-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

实例分析

  1. 查看TCP连接状态统计:ss -s
    输出包括总连接数、TCP各状态(ESTABLISHEDSYN_RECV等)的数量,适合快速概览。
  2. 查看某个端口的连接数: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

实例分析

Linux查看连接数有哪些常用命令?-图3
(图片来源网络,侵删)
  1. 查看80端口的连接详情:lsof -i:80
    输出包括进程ID、用户、连接状态等信息,适合排查端口占用问题。
  2. 查看所有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连接。

实例分析

  1. 统计TCP连接数:wc -l /proc/net/tcp
    输出结果减去首行标题(通常为1)即为实际TCP连接数。
  2. 解析IPv4 TCP连接:cat /proc/net/tcp | awk 'NR>1 {print $3}'
    提取本地和远程地址信息,需结合十六进制与IP转换工具(如ss)进一步解析。

注意/proc文件系统内容为实时数据,适合自动化脚本,但可读性较差。

综合应用建议

  1. 快速统计连接数:使用ss -snetstat -an | wc -l
  2. 排查端口占用:结合ss -tnl | grep ':端口号'lsof -i:端口号定位进程。
  3. 监控连接状态变化:使用watch -n 1 "ss -tn"动态刷新TCP连接。
  4. 高并发场景:优先选择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,检查应用程序是否正确关闭连接,避免频繁短连接。

分享:
扫描分享到社交APP
上一篇
下一篇