
API接口重試的8種方法
tcp6 0 0 :::8080 :::* LISTEN 2871/java
net-tools
包sudo lsof -i :80
-i
:指定網絡連接(格式:端口
/@主機
)-P
:禁止端口號轉服務名稱(顯示原始數字)-n
:禁用主機名解析COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1234 root 6u IPv4 0xabcd 0t0 TCP *:http (LISTEN)
lsof -u apache -i
lsof -i 6
ss -tulnp | grep '80'
-t
:TCP協議-u
:UDP協議-l
:監聽狀態-n
:數字格式-p
:顯示進程信息netstat
快30%ss -o state time-wait
)sudo fuser 80/tcp
80/tcp: 1234 5678
-k
參數可直接終止進程(慎用!)ls -l /proc/<PID>/fd | grep socket:
/proc/net/tcp
文件解析端口號(16進制)1F90
(8080)= echo $((0x1F90))
nmap -sT -O 127.0.0.1
-sS
:SYN半開掃描(需要root權限)-p 1-65535
:全端口范圍檢測--open
:僅顯示開放端口sudo ss -tlnp | grep ':80\b'
\b
確保精確匹配80端口docker ps --format "{{.Ports}}" | awk -F'->' '{print $1}'
sudo lsof -i -P -n | grep -v 'docker-proxy'
sudo netstat -atnp | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c
watch -n 1 'ss -o state time-wait | wc -l'
tcp_max_tw_buckets
kubectl get pods -o json | jq '.items[].spec.containers[].ports[]'
nsenter -t <PID> -n ss -ltn
#!/bin/bash
PORT=8080
while true; do
if ss -tln | grep -q ":$PORT"; then
echo "$(date): Port $PORT is occupied" >> port_monitor.log
break
fi
sleep 10
done
perf record -e syscalls:sys_enter_accept -a
perf script | flamegraph.pl > port_accept.svg
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_accept { printf("%s %d\n", comm, args->fd); }'
Q1: 為什么netstat
顯示127.0.0.1:8080和:::8080兩種監聽?
A: 分別表示IPv4和IPv6協議棧的監聽,可通過sysctl net.ipv6.bindv6only=1
調整綁定策略。
Q2: TIME_WAIT狀態是否影響服務重啟?
A: 是,可通過sysctl net.ipv4.tcp_tw_reuse=1
加速端口復用。
Q3: 如何永久保存端口監控配置?
A: 使用systemd創建定時器單元或配置crontab任務。
工具 | 速度 | 信息詳細度 | 易用性 | 適用場景 |
netstat | 中 | 高 | 優 | 兼容舊系統 |
ss | 快 | 高 | 良 | 現代Linux性能分析 |
lsof | 慢 | 極高 | 中 | 進程級深度排查 |
nmap | 慢 | 中 | 中 | 安全審計與全端口掃描 |
掌握這些工具的組合使用,可覆蓋從基礎運維到性能調優的全場景需求。建議在日常工作中優先使用ss
+lsof
組合,在復雜網絡問題中引入eBPF等高級技術,構建多層次的端口監控體系。