半夜三点,报警短信突然响了。打开手机一看,某台服务器的响应延迟飙升,用户开始抱怨页面打不开。这时候别慌,手边没高级监控工具也不要紧,Linux 自带的网络命令工具加上日志文件,照样能快速定位问题。
从 netstat 看连接状态
先看当前连接情况。比如怀疑是某个服务被大量短连接冲击,可以用:
netstat -an | grep :80 | grep ESTABLISHED | wc -l
这条命令统计了 80 端口已建立的连接数。如果数字远超平时,基本可以判断是并发过高或者有异常访问。再结合 grep TIME_WAIT 看是否有大量短连接残留,有助于判断是否需要调整内核参数。
用 tcpdump 抓包辅助分析
有时候日志里看不出请求来源,就得抓包。比如发现 Nginx 日志里一堆 404,但不知道是谁在扫接口。执行:
tcpdump -i eth0 -nn port 80 -c 100 -w /tmp/traffic.pcap
抓取前 100 个 80 端口的数据包存到文件。之后可以用 Wireshark 打开分析,也能直接用 tcpdump -r 回放。配合 grep 过滤源 IP,很快就能锁定扫描机器。
结合 tail 和 grep 实时盯日志
服务出问题,第一反应应该是看日志。Nginx、Apache、Tomcat 都有访问日志和错误日志。比如实时观察 Nginx 的 5xx 错误:
tail -f /var/log/nginx/error.log | grep --color 'error\|50[0-9]'
一旦出现红色高亮,马上就能察觉。如果发现某个 PHP 脚本频繁报错,再回头查代码或数据库连接,效率高很多。
用 lsof 查看网络与文件句柄
遇到“Too many open files”这种错误,光看日志不够。得用 lsof 查具体是谁在占资源:
lsof -i :443
列出所有使用 443 端口的进程。也可以按进程查:
lsof -p 1234
看看某个服务打开了多少连接和文件,是不是忘了关句柄。
组合技:找出异常访问来源
有一次,网站突然变慢,Nginx 日志显示大量来自同一个 IP 段的请求,都是访问一个不存在的 API 路径。于是用下面这串命令快速汇总:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
统计访问量最高的前十个 IP。发现有个 IP 占了三万多条,明显异常。配合 whois 查归属,确认是爬虫后直接封进防火墙。
这些命令不花哨,但关键时刻顶得上。日常维护时多练几遍,真出事才不会手忙脚乱。服务器就像一辆车,日志是仪表盘,网络命令就是你的扳手和探灯,修得好不好,全看工具熟不熟。