netstat 是排查网络服务监听状态和连接异常最直接常用的命令行工具,可查看监听端口、定位端口占用、分析连接状态及过滤特定连接,虽渐被 ss 替代但仍广泛可用。

netstat 是排查网络服务监听状态和连接异常最直接、最常用的命令行工具之一,尤其在无图形界面的服务器环境中不可或缺。它能快速展示当前系统所有网络连接、监听端口、协议状态及对应进程信息,是运维和开发人员定位服务未启动、端口被占、连接泄漏等问题的第一步。
查看本机所有监听端口(含服务名)
确认服务是否真正启动并监听预期端口,是最基础也最关键的一步:
- netstat -tuln:显示所有 TCP/UDP 的监听(-t TCP, -u UDP, -l listening, -n 不解析域名/IP)
- netstat -tulnp:加 -p 显示对应进程 PID 和程序名(需 root 或 sudo 权限)
- 若某端口(如 8080)未出现在列表中,说明服务未启动或监听配置错误(比如绑定了 127.0.0.1 而非 0.0.0.0)
识别端口占用冲突(谁抢了你的 3306?)
服务启动失败常因端口已被其他进程占用,netstat 可精准定位:
- netstat -tulnp | grep :3306 查看 3306 端口归属进程
- 输出类似
tcp6 0 0 *:3306 *:* LISTEN 1234/mysqld,其中 1234 是 PID,mysqld 是进程名 - 确认是否为预期进程;若不是,可用 kill -9 1234 终止,或修改服务配置换端口
分析异常连接状态(TIME_WAIT 太多?ESTABLISHED 不降?)
连接堆积、响应变慢时,通过连接状态分布可快速判断问题类型:
- netstat -an | awk '{print $6}' | sort | uniq -c | sort -n 统计各状态连接数
- 重点关注:TIME_WAIT 过多可能因短连接频繁(调优内核参数如
net.ipv4.tcp_tw_reuse);ESTABLISHED 持续增长且不释放,可能是客户端未断连或服务端连接池泄漏;CLOSE_WAIT 高说明本机应用未主动关闭 socket - 配合 netstat -antop | grep :80 查看特定端口的活跃连接详情(含用户、PID)
过滤特定协议、地址或进程快速定位
面对海量连接,合理组合参数能大幅提升排查效率:
- 只看 TCP 连接:netstat -tn;只看 IPv4:netstat -4tuln
- 查某个 IP 的所有连接:netstat -an | grep 192.168.1.100
- 查某进程的所有网络活动:netstat -tunp | grep nginx(注意大小写)
- 实时监控变化(每2秒刷新):watch -n 2 'netstat -tuln | head -20'
netstat 虽然在新系统中逐渐被 ss(socket statistics)替代(性能更高、功能更全),但在多数生产环境仍广泛可用。掌握其核心用法,能快速穿透网络层迷雾,直击服务通信本质。不复杂但容易忽略细节,熟练后几分钟就能定性问题根源。








