性能·网络 / 命令文档

Linux ss命令

$ ss 14 个章节 Linux 命令详解

概述

网络调试与监控的利器

为什么需要ss命令?

在Linux系统管理和网络故障排除中,了解系统的网络连接状态至关重要。传统的netstat命令虽然功能强大,但在现代高负载系统中存在性能瓶颈。

netstat的局限性:

在大量连接的系统上运行缓慢

需要遍历整个/proc/net目录

输出格式相对固定,扩展性有限

对IPv6支持不够完善

ss命令的优势

特性netstatss
执行速度较慢快速
内存占用较高较低
过滤功能基础强大
输出格式固定灵活
IPv6支持一般优秀

基础语法

ss [选项] [过滤条件]

主要选项详解

ss -t
显示TCP连接
ss -u
显示UDP连接
ss -l
只显示监听端口
ss -a
显示所有连接
ss -n
不解析主机名
ss -p
显示进程信息

常用组合命令

1. 查看所有TCP监听端口

ss -tlnp

这是最常用的组合,显示所有TCP监听端口及其对应的进程

2. 查看特定端口的连接

ss -tlnp | grep :80
ss -tlnp sport = :80

3. 查看已建立的TCP连接

ss -tnp state established

4. 统计连接状态

ss -s
实用技巧:使用 -o 选项可以显示计时器信息,-e 选项显示详细的套接字信息,-m 选项显示套接字内存使用情况。

过滤表达式

ss命令支持强大的过滤功能,可以精确筛选所需的连接信息:

状态过滤

ss state established
ss state listening
ss state time-wait

端口过滤

ss sport = :80
ss dport = :3306
ss sport \> :1024

地址过滤

ss src 192.168.1.100
ss dst 10.0.0.0/8

复合过滤

ss -tn state established and dst :80
ss -tu state listening and sport \> :1024

权限要求

权限限制:普通用户只能查看自己的进程信息,要查看所有进程的网络连接需要root权限或使用sudo。
sudo ss -tlnp  # 需要管理员权限

性能考虑

性能提示: 使用-n选项避免DNS解析,提高执行速度 在高负载系统上,ss比netstat快数倍 合理使用过滤条件,减少输出量

输出解读

输出字段含义:

State: 连接状态(LISTEN, ESTABLISHED, TIME-WAIT等)

Recv-Q: 接收队列中的字节数

Send-Q: 发送队列中的字节数

Local Address:Port: 本地地址和端口

Peer Address:Port: 远程地址和端口

Process: 关联的进程信息

常见问题与解决

1. 显示结果过多

问题:在繁忙的服务器上,ss输出可能非常多,难以查看。 解决:使用过滤条件或结合管道命令。
ss -tn | head -20
ss -tn state established | wc -l

2. 进程信息显示不完整

问题:某些进程信息显示为空或不完整。 解决:确保有足够权限,或者进程可能已经结束。

3. IPv6连接显示

提示:ss默认显示IPv4和IPv6连接,如果只需要IPv4,使用-4选项;只需要IPv6,使用-6选项。
ss -4 -tlnp  # 仅IPv4
ss -6 -tlnp  # 仅IPv6

最佳实践

日常运维建议:

定期检查监听端口:ss -tlnp

监控连接数变化:ss -s

排查网络问题时结合tcpdump使用

编写监控脚本时使用JSON输出:ss -j

在生产环境中避免不必要的DNS解析

系统监控脚本示例

#!/bin/bash
# 网络连接监控脚本
echo "=== TCP连接统计 ==="
ss -s

echo -e "\n=== 监听端口 ==="
ss -tlnp

echo -e "\n=== 活跃连接数 ==="
ss -tn state established | wc -l

echo -e "\n=== TIME-WAIT连接数 ==="
ss -tn state time-wait | wc -l

故障排查场景

场景:Web服务响应缓慢 排查步骤: 1.使用curl测试确认慢在哪 httpstat "http://img.youngsu.top/" 2.登陆服务器自检 top -c # CPU, load, 哪个进程占用高 vmstat 1 # 系统负载、上下文切换 iostat -x 1 # 磁盘I/O瓶颈 ar -n DEV 1 # 网络带宽 free -m # 内存情况 3.使用ss命令检查网络连接 检查监听状态:ss -tlnp | grep :80 查看连接队列:ss -tln sport = :80 统计连接状态:ss -tn | awk '{print $1}' | sort | uniq -c 4.检查web日志定位 cat /data/wwwlogs/access_nginx.log | awk '{print $7,$NF}' | sort | uniq -c | sort -nr | head

同分类 · 其他命令文档