1.
准备阶段:确认环境与登录方式
首先通过华为云控制台确认故障主机(香港region)实例ID、弹性公网IP和安全组规则。使用私钥或用户名密码通过SSH登录:ssh -i /path/to/key.pem root@IP。若SSH不能连接,先在控制台使用“紧急访问/串口终端”进入实例以避免影响生产。
2.
第一时间做的三件事(最重要)
一:不要立即重启机器(会丢失内存中的临时证据)。二:在能连通时实时采样top -b -n 1 > /tmp/top.now.txt && ps aux --sort=-%cpu | head -n 30 > /tmp/ps.cpu.txt。三:保存系统时间和uptime:date > /tmp/when.txt; uptime >> /tmp/when.txt。
3.
采集基础系统指标(CPU/内存/IO/网络)
执行:vmstat 1 60 > /tmp/vmstat.60.txt;iostat -xz 1 10 > /tmp/iostat.10.txt;sar -u 1 60 > /tmp/sar.cpu.txt(需安装sysstat);free -m > /tmp/free.txt;df -h > /tmp/df.txt。这些命令给出短期整体趋势,便于判断是CPU飙高、内存耗尽还是IO饱和。
4.
进程级诊断:定位占用资源的进程
使用top(或htop)观察瞬时占用:top -b -n 1 | head -n 50 > /tmp/top.snap.txt。若怀疑单个进程,记录其PID并导出详细状态:ps -p PID -o pid,ppid,cmd,%mem,%cpu,etime > /tmp/proc.PID.info。可用smem生成内存占用树(需安装)。
5.
磁盘与IO深入:判断是否为IO瓶颈
查看iostat输出的 %util、await、svctm,若%util接近100%且await高,说明磁盘IO瓶颈。查看ioping(若有)或使用iotop -aoP查看实时IO重度进程:iotop -b -n 5 > /tmp/iotop.txt。检查磁盘SMART:smartctl -a /dev/xvda(若支持)。
6.
网络问题排查:连接数与包丢失
查看连接数与端口占用:ss -s; ss -tunlp | head -n 50 > /tmp/ss.list.txt。使用iftop或nethogs观察带宽占用。若怀疑丢包或延迟,执行tcpdump -n -i eth0 tcp and host 客户端IP -c 1000 -w /tmp/capture.pcap,然后在本地打开Wireshark分析三次握手或重传。
7.
内核与系统日志检查
查看dmesg以捕捉硬件或内核错误:dmesg --ctime | tail -n 200 > /tmp/dmesg.tail.txt。若系统使用systemd,查看journalctl -xe --since "1 hour ago" > /tmp/journal.1h.txt;也检查/var/log/messages、/var/log/syslog和应用日志目录下的日志。
8.
应用级日志与线程堆栈采集
对Java应用:使用jstack PID > /tmp/jstack.PID.txt,并使用jmap -heap PID > /tmp/jmap.PID.txt(注意jmap可能会使应用暂停)。对C/C++进程:生成core dump(ulimit -c unlimited; kill -ABRT PID 或 echo c > /proc/sysrq-trigger),然后用gdb /proc/PID/exe core -ex "bt full" -ex "quit" > /tmp/core.bt.txt。
9.
系统性能分析工具:perf与火焰图
若系统挂起但还能采样,使用perf record -F 99 -a -g -- sleep 30 生成采样文件,perf script > out.perf,再用FlameGraph脚本生成火焰图,定位CPU热点。注意:在虚拟化环境中采样精度受限,但仍可定位用户态热点。
10.
追踪系统调用:strace 与 eBPF 工具
对怀疑的短时间高频调用进程运行:strace -ff -tt -T -p PID -o /tmp/strace.PID.txt(注意性能开销)。如果能使用bcc 或 bpftrace,运行 bpftrace 脚本统计 syscalls、tcp events,更高效地捕获短时高频问题。
11.
长期监控与指标回溯(CloudMonitor/自建TSDB)
在非紧急时,确保华为云的云监控(CloudMonitor)已开启并收集CPU、内存、磁盘、网络指标。若怀疑历史趋势导致挂起,通过控制台回溯曲线或从自建Prometheus/Grafana导出时间段内的指标,与日志时间线进行对齐。
12.
证据保存与上传(安全合规)
将采集到的关键文件打包:tar czf /tmp/diag-$(date +%s).tgz /tmp/top.now.txt /tmp/*.txt /tmp/*.pcap /var/log/*.log。上传到华为云OBS或安全的SFTP存储:ossutil cp localfile obs://bucket/path/(或用scp到分析主机)。保留原始时间戳并记录操作日志,便于事后分析和审计。
13.
恢复策略:临时缓解与长线修复
临时缓解包括:对高IO/CPU的非关键进程限制资源(使用cgroups 或 systemd的CPUQuota/MemoryLimit),对内存泄漏的服务进行优雅重启,调整Nginx/数据库连接池大小,扩容(创建新实例并加到负载均衡池)。长线修复需根据采集的证据改代码或优化配置。
14.
注意事项与避免误操作清单
避免在未保存证据前重启或kill -9 关键进程;生成core或perf采样时考虑性能影响;敏感日志要遵守合规与隐私策略;在香港region跨境传输日志时留意数据合规要求。操作前记录每一步并通知相关负责人。
15.
问题一:在华为云香港服务器挂了的第一步我应该做什么?
首先不要随意重启,记录故障时间并通过SSH或控制台串口登录,立即采集top、vmstat、iostat、dmesg等快照并保存到/tmp,确保获取瞬时证据以便后续分析。
16.
回答一:如何在不影响服务的前提下收集性能日志?
优先使用非侵入式命令(top -b -n1、vmstat 1 30、iostat等)快速采样;对重采样或需要生成dump的操作在低峰窗口或只对个别实例执行;若必须使用strace/perf,限制采样时间并在维护窗口内进行。
17.
问题二:分析完日志后我如何防止再次发生类似挂起?
基于排查结果采取措施:如发现IO瓶颈可调整IO调度、使用SSD盘或扩容;发现内存泄漏需修复代码并加自动重启策略;完善监控告警阈值并定期执行压测,确保容量规划与弹性伸缩规则合理。
来源:性能日志分析工具在华为云香港服务器挂了排查中的应用