服务器半夜抽风?三招摸清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怀疑数据库连接泄漏。这时候要看连接状态的生命周期:
- 查看TIME_WAIT堆积
bash复制netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
网页7教的状态统计法,TIME_WAIT超过2000就要调优内核参数了。
- 揪出僵尸连接
bash复制lsof -i:3306
网页3提到的lsof命令,直接锁定MySQL端口。发现大量CLOSE_WAIT?应用程序没正确关闭连接。
- 紧急止血方案
bash复制sysctl -w net.ipv4.tcp_keepalive_time=600
临时调短保活时间,让僵 *** 连接快点超时。
场景三:老板担心服务器被黑,要查异常外联
安全审计时,发现服务器有可疑境外IP连接记录。这时候需要立体化排查:
连接图谱三步走
- 实时监控
bash复制watch -n 1 "ss -ntuap | grep -v '127.0.0.1'"
网页6的监控技巧,每秒刷新排除本地连接。
- 历史追溯
bash复制grep 'Accepted publickey' /var/log/auth.log
网页4提到的日志分析法,看看可疑时间段有没有异常登录。
- 路由追踪
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这些老伙计用熟吧,关键时刻能救命!