服务器半夜抽风?三招摸清Linux连接状态,Linux服务器半夜抽风?三招轻松排查连接状态


场景一:网站突然 *** ,运维小哥凌晨被call

凌晨三点,值班手机突然狂震——监控显示Web服务器响应超时。这时候​​别急着重启​​,掏出这三个命令快速定位:

​第一步:揪出异常进程​

bash复制
ss -tunp | grep ESTABLISHED

网页3提到的ss命令比netstat更高效,能瞬间列出所有TCP/UDP连接。发现某个PHP进程与陌生IP:443保持着20个ESTABLISHED连接?八成是被CC攻击了。

​第二步:确认流量走向​

bash复制
tcpdump -i eth0 'tcp port 443' -nn -c 50

网页6推荐的抓包神器,50个包就能看清是不是有异常IP在疯狂请求。要是看到大量SYN_SENT状态,可能是服务器在向外疯狂建连。

​第三步:封堵可疑IP​

bash复制
iptables -A INPUT -s 1.2.3.4 -j DROP

临时封禁后立即用conntrack -L确认连接数下降,这招比直接重启服务更稳妥。


场景二:数据库响应慢如蜗牛,DBA急得跳脚

早上例会时报表系统卡 *** ,DBA怀疑数据库连接泄漏。这时候要看连接状态的​​生命周期​​:

  1. ​查看TIME_WAIT堆积​
bash复制
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

网页7教的状态统计法,TIME_WAIT超过2000就要调优内核参数了。

  1. ​揪出僵尸连接​
bash复制
lsof -i:3306

网页3提到的lsof命令,直接锁定MySQL端口。发现大量CLOSE_WAIT?应用程序没正确关闭连接。

  1. ​紧急止血方案​
bash复制
sysctl -w net.ipv4.tcp_keepalive_time=600

临时调短保活时间,让僵 *** 连接快点超时。


场景三:老板担心服务器被黑,要查异常外联

安全审计时,发现服务器有可疑境外IP连接记录。这时候需要​​立体化排查​​:

​连接图谱三步走​

  1. ​实时监控​
bash复制
watch -n 1 "ss -ntuap | grep -v '127.0.0.1'"

网页6的监控技巧,每秒刷新排除本地连接。

  1. ​历史追溯​
bash复制
grep 'Accepted publickey' /var/log/auth.log

网页4提到的日志分析法,看看可疑时间段有没有异常登录。

  1. ​路由追踪​
bash复制
mtr -n 8.8.8.8 --tcp --port 443

网页2的路由探测法,看看流量是不是绕道奇怪国家。


连接状态红黑榜(运维必背)

状态健康度典型场景处理建议
ESTABLISHED正常业务连接关注连接数突增
TIME_WAIT⚠️四次挥手完成超过2000需调优
CLOSE_WAIT应用未正确关闭连接立即检查程序代码
SYN_RECV⚠️可能遭遇SYN Flood攻击启动syn cookies防护
FIN_WAIT2对端未响应FIN缩短tcp_fin_timeout

小编观点

干了十年运维,发现排查连接状态就像破案——不能只看现场(当前状态),还得查监控录像(日志),验指纹(进程信息)。现在新兴的eBPF技术可以直接在内核层抓取连接状态变化,估计再过两年,咱们排查问题能像看直播一样实时了。不过在这之前,还是先把ss、netstat这些老伙计用熟吧,关键时刻能救命!