1) 确认服务器基本信息:操作系统、内核版本、架构与时区。建议命令:uname -a、lsb_release -a、timedatectl。
2) 确认网络位置与延迟:traceroute、ping 到目标(例如马来西亚本地用户与 CDN 节点)来评估延时。
3) 确认服务栈:常见为 Nginx/Apache + PHP-FPM 或 Node.js + PM2。检查版本:nginx -v、php -v、node -v。
4) 权限与访问:确保有 root 或 sudo 权限,能读日志(/var/log、/var/log/nginx、/var/log/php-fpm)。
5) 备份与快照:在做修改前务必创建 VPS 快照或备份配置,尤其是生产环境位于马来西亚机房时,恢复时间成本高。
1) 收集 CPU/内存/磁盘:lscpu、free -m、df -h。
2) 收集网络/连接数:ss -s、netstat -anp | grep :80、cat /proc/net/netstat。
3) 记录服务配置:Nginx 配置文件、PHP-FPM pool、数据库连接池大小。
4) 示例配置表(中心对齐,边框1):
| 字段 | 示例值 |
|---|---|
| 操作系统 | Ubuntu 20.04 x86_64 |
| CPU | 2 vCPU (Intel Xeon) |
| 内存 | 4 GB |
| 磁盘 | 80 GB SSD |
| 公网 IP | 203.0.113.45 |
1) Nginx:查看 access.log 与 error.log(/var/log/nginx/),使用 tail -F 实时监控。
2) PHP-FPM:检查 slowlog 及 www-error.log,开启 slowlog 可定位慢请求与堆栈。
3) 系统日志:journalctl -u nginx -f 或 tail -F /var/log/syslog 用于内核 OOM、文件描述符不足等问题定位。
4) 示例日志行与含义(示例):
2026/07/12 14:02:33 [error] 1234#1234: *5678 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 203.0.113.10, server: example.my, request: "GET /api/data HTTP/1.1", upstream: "http://127.0.0.1:9000/..."5) 解析:upstream timed out 多数指后端 PHP-FPM/应用响应慢或连接被耗尽,应同时检查后端进程与慢日志。
1) 在应用入口(Nginx 或应用中间件)注入 X-Request-ID,便于日志串联。示例 Nginx 配置:proxy_set_header X-Request-ID $request_id。
2) 在 PHP/Node 中打印该 Request ID 到 access 与 error 日志,使用统一格式便于 grep。
3) 使用定位字段:URL、User-Agent、客户端 IP、时间窗口,结合 awk/grep 快速过滤日志。
4) 样例 PHP-FPM slowlog 配置片段:
request_slowlog_timeout = 5s slowlog = /var/log/php-fpm/slowlog-www.log5) 结合 APM(如 NewRelic、Datadog)可直观展示分段耗时,若无 APM,可用 strace 或 xdebug 做局部追踪。
1) 观察连接总数:ss -s、ss -tpn | head,若大量 SYN_RECV/ESTAB 可能是流量激增或 SYN 洪泛。
2) 使用 tcpdump 采样(仅在非高峰短时间):tcpdump -nn -s0 -c 200 host 203.0.113.45 and port 80。
3) 检查 iptables / nftables 规则与 conntrack:conntrack -L | wc -l,查看是否溢出 conntrack_max。
4) CDN 与 WAF:当遭受大流量时先开启 CDN 缓存规则与 WAF 过滤,减轻源站压力。
5) 示例 tcpdump 输出解读(示例):
10:12:03.123456 IP 192.0.2.1.45678 > 203.0.113.45.80: Flags [S], seq 0, win 64240, options [mss 1460], length 0以上若短时间内出现数十万条即为异常连接行为,需上报带宽/防护供应商或启用流量清洗。
1) 背景:某电商在吉隆坡机房节点高峰期出现大量 502/504 错误,客户投诉响应慢。
2) 初步证据:Nginx error.log 中大量 "upstream timed out" 与 "connect() failed (111: Connection refused)",ss 显示大量 TIME_WAIT/ESTAB。
3) 排查发现:php-fpm pool 的 pm.max_children=20,但并发峰值 120,导致队列阻塞与拒绝连接。
4) 解决动作:临时增加 pm.max_children 至 100(基于内存核算:每个 PHP 进程约 40MB,100*40MB=4GB),并调整 pm.start_servers/pm.min/max。
5) 后续优化:引入 CDN 缓存静态资源,使用 Redis 缓存热点 API,设置监控告警(CPU、php-fpm active processes、conntrack)。
1) 快速清单(优先级):检查硬件/资源 -> 日志 -> 后端进程 -> 网络 -> 外部依赖(DB、第三方)。
2) 常用一键命令示例:
sudo bash -c 'echo "=== uptime ==="; uptime; echo "=== free ==="; free -m; echo "=== ss ==="; ss -s; echo "=== top5 nginx errors ==="; tail -n 20 /var/log/nginx/error.log | grep -i error'3) PHP-FPM 慢请求定位命令:tail -n 200 /var/log/php-fpm/slowlog-www.log | sed -n '1,200p'。