1. 初步确认与准备(快速复现与收集)
步骤1: 记录影响时间窗口(开始/结束)并确定时区(
美国服务器常用UTC或美东/美西)。
步骤2: 在不干扰生产的前提下开启临时抓取:ssh 登录服务器,运行 top -b -n 1 或 vmstat 1 5 收集基线,保存为 /tmp/sys_baseline.log。
2. 收集访问与错误日志(Web 层)
对 nginx: tail -n 1000 /var/log/nginx/access.log | grep "2026-04-26" > /tmp/access_slice.log;tail -n 500 /var/log/nginx/error.log > /tmp/error_slice.log。
对 apache: tail -n 1000 /var/log/apache2/access.log | awk '{print $4,$9,$10,$12}' > /tmp/ap_access.log。注意按时间范围过滤或用 journalctl -u nginx --since "2026-04-26 10:00"。
3. 快速定位高延迟请求(按响应时间)
如果日志包含响应时间字段(nginx $request_time),使用:awk '$NF>1.0{print $0}' access.log | sort -nr -kNF > slow_requests.log(示例阈值1s)。
若无响应时间,可通过状态码筛选:grep -E '" 5[0-9][0-9] ' access.log | awk '{print $4,$6,$7,$9}'。
4. 系统资源层面排查(CPU、内存、IO)
命令:sar -u 1 5、iostat -x 1 5、vmstat 1 5。查看是否有高 %iowait 或大量 swap。
若 IO 高,使用 iotop -o 或 lsblk 与 smartctl 检查磁盘健康,确认是否为 EBS/云盘问题(针对 AWS 检查 CloudWatch 磁盘队列长度)。
5. 进程与线程级诊断(定位占用者)
用 ps aux --sort=-%cpu 前 10 或 top 找到问题进程PID。查看线程详情:top -H -p
。
对 Web 进程可用 strace -tt -p -o /tmp/strace.log(短时间运行)观察系统调用阻塞点;用 lsof -p 查看打开的文件/网络连接。
6. 数据库与外部依赖检查
检查 DB 连接数/慢查询:MySQL slow_query_log 或 postgresql pg_stat_activity;命令示例:mysql -e "SHOW PROCESSLIST\G"。
若外部 API 慢,使用 curl -w "%{time_total}\n" -o /dev/null -s "https://api.example" 在服务器端重现并记录延迟。
7. 网络层面排查(延迟、丢包、连接数)
使用 ss -tunap 查看大量 TIME_WAIT/连接耗尽问题;用 netstat -s 检查丢包。
对跨洋延迟:traceroute -n 或 mtr -r -c 100 ;若属于云厂商内部网络,查看 Load Balancer(如 ELB/ALB)/Cloudflare 日志与健康检查。
8. 抓包与会话分析(tcpdump)
若需抓包:tcpdump -i eth0 host and port 80 -w /tmp/capture.pcap -C 50(按文件分割)。
用 Wireshark 或 tshark 过滤 SYN/RST/重传,定位网络重试或握手失败导致的超时。
9. 日志关联与时间线重建(关键)
将系统指标、Web日志、应用日志按统一时间轴合并:确保所有时钟使用 ntp 或 chrony,并将日志时间统一到 UTC。
用 awk/perl 或小脚本按时间戳合并(示例:awk '{print $1" "$0}' file | sort)来重建请求从入口到 DB 的完整路径。
10. 修复步骤与验证(从临时到根治)
临时缓解:重启恢复性服务 systemctl restart nginx(先检查配置 nginx -t),增加连接数/线程数配置或开启缓存(如启用 nginx fastcgi_cache)。
根本修复:优化 SQL、增加索引、调整慢查询、做限流(429)、扩容后端或优化代码。每次改动后回收日志与指标,重复 baseline 命令验证效果。
11. 迁移与云平台专属检查(美国节点注意点)
美国节点常见问题:跨地域延迟、CDN缓存策略、时区设置。检查云监控(CloudWatch/GCP Stackdriver)报警历史与网络ACL、安全组规则是否限流或丢包。
若为 AWS,查看 ELB/ALB TargetHealth、EBS 性能指标与实例类型的网络带宽上限。
12. 工具与自动化建议
推荐工具:GoAccess(实时访问分析)、Elastic Stack(集中日志)、Prometheus+Grafana(指标)和 Packetbeat。
将常用诊断命令写入脚本,并设置临时 KPI 抓取脚本(CPU、内存、IO、conn)在问题窗口自动上传到安全的对象存储,便于离线分析。
13. 常见问答:如何快速判断是网络还是应用问题?
问:怎么快速区分是网络问题还是应用性能问题?
答:先用 curl 在服务器本地请求本地服务(127.0.0.1)和外部请求(客户端IP或第三方),若本地也慢为应用/DB或本机资源问题;若本地快但远端慢,多为网络/负载均衡或 CDN 问题,结合 traceroute/tcpdump 进一步确认。
14. 常见问答:何时使用 strace 或 tcpdump?
问:遇到 502/504 错误,我应该先用 strace 还是 tcpdump?
答:先看日志与进程状态:若进程阻塞或高 CPU 用 strace 找系统调用阻塞点;若错误显示网络超时或连接问题优先用 tcpdump 抓包分析网络三次握手、重传或对端拒绝。
15. 常见问答:恢复后怎样防止复发?
问:问题修复后如何预防复发并提高响应速度?
答:步骤包括:1) 建立告警(响应时间、错误率、资源阈值);2) 集中日志与可视化;3) 自动化回放与压测;4) 持续优化 DB 与缓存;5) 定期演练故障恢复并记录 RCA(根因分析)。
来源:日志分析与故障排查 指导你在美国www服务器上快速定位并解决性能问题