公司动态
Linux网络排查利器:ss命令详解与实战应用
今天我们来快速掌握 Linux 系统中的ss命令。如果你经常需要排查网络连接问题、查看端口占用情况或者想了解系统网络连接状态这个工具比传统的netstat更高效、信息更全面。ss命令Socket Statistics是 iproute2 工具包的一部分专门用于转储套接字统计信息。它能够显示比netstat更详细的 TCP 和状态信息执行速度也更快。无论是系统管理员、网络工程师还是开发人员掌握ss命令都能显著提升网络问题排查效率。1. 核心能力速览能力项说明主要功能查看套接字连接状态、端口占用、进程关联等网络信息替代工具比 netstat 更快速、信息更详细支持协议TCP、UDP、UNIX 域套接字、RAW、SCTP 等信息维度连接状态、定时器信息、内存使用、进程关联等过滤能力支持按状态、端口、地址等条件精确过滤系统要求主流 Linux 发行版默认安装无需额外配置2. ss 命令与 netstat 的对比优势为什么推荐使用ss而不是传统的netstat主要有以下几个原因性能优势ss直接从内核空间获取套接字信息而netstat需要读取/proc/net/tcp等文件当系统有大量连接时ss的速度优势非常明显。信息更丰富ss可以显示更详细的 TCP 内部信息包括定时器状态、内存使用情况、拥塞控制参数等这些对于深度排查网络问题非常有帮助。过滤功能强大ss提供了灵活的过滤语法可以精确筛选出感兴趣的连接比如只查看特定状态的 TCP 连接或者只显示某个端口的连接。未来发展netstat已经被标记为过时在新的 Linux 发行版中ss是推荐的替代工具。3. 基础语法与常用选项ss命令的基本语法格式为ss [选项] [过滤条件]3.1 常用选项速查显示选项-t显示 TCP 套接字-u显示 UDP 套接字-x显示 UNIX 域套接字-l仅显示监听套接字-a显示所有套接字监听非监听-n以数字形式显示不解析服务名-p显示使用套接字的进程信息信息详细程度-e显示详细套接字信息-m显示套接字内存使用情况-o显示定时器信息-i显示内部 TCP 信息4. 实战应用场景4.1 查看所有 TCP 连接最基本的用法是查看所有 TCP 连接ss -t -a这个命令会列出所有 TCP 套接字包括监听状态和已建立的连接。输出格式通常包括Local Address:Port本地地址和端口Peer Address:Port对端地址和端口State连接状态ESTABLISHED、LISTEN、TIME-WAIT 等4.2 查看端口监听情况要查看系统正在监听的端口使用ss -tuln这个组合非常实用-tTCP 协议-uUDP 协议-l仅显示监听套接字-n数字格式不解析服务名输出示例Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* tcp LISTEN 0 100 127.0.0.1:25 0.0.0.0:*4.3 查看进程关联信息想知道哪个进程在使用某个端口加上-p选项ss -tulnp输出中会显示进程 ID 和进程名tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:((sshd,pid1234,fd3))这在排查端口冲突时特别有用可以快速定位到具体的进程。4.4 查看详细的 TCP 内部信息对于需要深度排查的网络问题可以查看 TCP 内部信息ss -ti这会显示包括拥塞窗口、RTT往返时间、MSS最大段大小等详细信息ESTAB 0 0 192.168.1.100:ssh 192.168.1.200:12345 cubic wscale:7,7 rto:204 rtt:1.25/0.75 ato:40 mss:1448 cwnd:10 send 1.0Mbps5. 高级过滤技巧ss的强大之处在于其灵活的过滤能力。5.1 按连接状态过滤只查看已建立的 SSH 连接ss -t state established ( dport :ssh or sport :ssh )查看所有处于 FIN-WAIT-1 状态的连接ss -t state fin-wait-15.2 按端口号过滤查看目标端口为 80 或 443 的连接ss -t ( dport :http or dport :https )或者使用数字端口ss -t ( dport :80 or dport :443 )5.3 按 IP 地址过滤查看与特定 IP 段的连接ss -t dst 192.168.1.0/246. 实际排查案例6.1 案例一端口占用排查场景启动服务时发现 8080 端口被占用。排查步骤# 查看 8080 端口的占用情况 ss -tulnp | grep :8080 # 如果发现被占用查看具体连接 ss -tamp | grep :80806.2 案例二网络连接故障排查场景应用无法连接到数据库服务器。排查步骤# 查看到数据库端口的连接状态 ss -t state established ( dport :5432 ) # 查看连接超时或失败的状态 ss -t state syn-sent6.3 案例三性能问题排查场景网络传输速度慢怀疑有丢包或拥塞。排查步骤# 查看 TCP 连接的内存和缓冲区状态 ss -tm # 查看详细的 TCP 内部参数 ss -ti7. 内存和资源监控ss -m可以显示套接字的内存使用情况格式为skmem:(rrmem_alloc,rbrcv_buf,twmem_alloc,tbsnd_buf)rmem_alloc为接收数据包分配的内存rcv_buf可用于接收数据包的总内存wmem_alloc用于发送数据包的内存snd_buf可用于发送数据包的总内存这对于排查内存泄漏或缓冲区设置不合理的问题很有帮助。8. 定时器信息分析ss -o显示 TCP 定时器信息格式为timer:(timer_name,expire_time,retrans)定时器类型包括on重传定时器TCP retrans timerkeepaliveTCP 保活定时器timewaitTIME-WAIT 阶段定时器persist零窗口探测定时器这对于分析连接超时、重传问题非常有用。9. 常见问题排查指南9.1 端口被占用错误问题现象启动服务时报 Address already in use排查命令ss -tulnp | grep 端口号解决方案终止占用端口的进程更改服务配置使用其他端口等待 TIME-WAIT 状态超时通常 60 秒9.2 连接数过多问题问题现象系统性能下降无法建立新连接排查命令# 查看总连接数 ss -t | wc -l # 按状态分类统计 ss -t | grep -o STATE[A-Z-]* | sort | uniq -c解决方案优化应用连接管理使用连接池调整系统文件描述符限制检查是否有连接泄漏9.3 连接状态异常问题现象大量连接处于异常状态排查命令# 查看各种状态的连接数 ss -t -a | awk {print $1} | sort | uniq -c # 查看长时间处于特定状态的连接 ss -t state time-wait10. 实用技巧和最佳实践10.1 组合使用其他工具ss可以与其他工具组合使用发挥更大威力# 实时监控连接变化 watch -n 1 ss -t state established # 统计每个 IP 的连接数 ss -t | grep ESTAB | awk {print $5} | cut -d: -f1 | sort | uniq -c | sort -nr # 监控特定端口的连接变化 watch -n 1 ss -t sport :8010.2 自动化监控脚本可以编写脚本定期检查关键指标#!/bin/bash # 监控关键端口的连接状态 CRITICAL_PORTS22 80 443 3306 5432 for port in $CRITICAL_PORTS; do count$(ss -t sport :$port state established | wc -l) echo Port $port: $count established connections if [ $count -gt 100 ]; then echo WARNING: Port $port has high connection count! fi done10.3 性能调优参考通过ss观察到的信息可以指导性能调优接收/发送缓冲区大小通过ss -m观察如果rmem_alloc经常接近rcv_buf可能需要调整缓冲区大小TCP 参数优化通过ss -ti观察 RTT、拥塞窗口等参数指导 TCP 参数调优连接池配置通过连接数统计合理设置应用连接池大小11. 安全相关应用11.1 检测异常连接定期检查异常的外连或入连# 检查不常见的目标端口 ss -t state established | awk {print $5} | cut -d: -f2 | sort -n | uniq # 检查不常见的源 IP ss -t state established | awk {print $4} | cut -d: -f1 | sort | uniq -c | sort -nr11.2 监控敏感服务对 SSH、数据库等敏感服务加强监控# 监控 SSH 连接 ss -t ( sport :ssh ) state established # 监控数据库连接 ss -t ( sport :5432 ) state establishedss命令是 Linux 网络排查的利器掌握它能够让你在遇到网络问题时快速定位原因。从基本的端口查看到复杂的性能分析ss都能提供有价值的信息。建议在日常工作中多练习使用将其纳入常规的监控和排查流程中。对于系统管理员和开发人员来说花三分钟学会ss命令的基本用法在未来的工作中可能会节省数小时的排查时间。这个工具值得投入时间深入掌握。