Linux 服务器故障排查顺序

CPU 高,负载高,访问慢(没有数据库)

  • 记录负载开始升高的时间
  • 系统层面
    • 查看负载、CPU、内存、上线时间、高资源进程 PID:htop
    • 查看磁盘使用情况:df -h
    • 查看磁盘当前情况:iostat -x -k 3 3。如果发现当前磁盘忙碌,则查看是哪个 PID 在忙碌:iotop -o -P -k -d 5
    • 查看 PID 具体在写什么东西:lsof -p PID
    • 查看系统日志:tail -400f /var/log/messages
    • 查看简化线程树:pstree -a >> /opt/pstree-20180915.log
    • 其他机子 ping(多个地区 ping),看下解析 IP 与网络丢包
    • 查看网络节点情况:traceroute www.youmeek.com
    • ifconfig 查看 dropped 和 error 是否在不断增加,判断网卡是否出现问题
    • nslookup 命令查看 DNS 是否可用
    • 如果 nginx 有安装:http_stub_status_module 模块,则查看当前统计
    • 查看 TCP 和 UDP 应用
      • netstat -ntlp
      • netstat -nulp
    • 统计当前连接的一些状态情况:netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
    • 查看每个 ip 跟服务器建立的连接数:netstat -nat|awk '{print1}'|sort|uniq -c|sort -rn
    • 跟踪程序(按 Ctrl + C 停止跟踪):strace -tt -T -v -f -e trace=file -o /opt/strace-20180915.log -s 1024 -p PID
    • 看下谁在线:w,last
    • 看下执行了哪些命令:history
  • 程序、JVM 层面
    • 保存、查看 Nginx 程序 log
      • 通过 GoAccess 分析 log
    • 保存、查看 Java 程序 log
    • 使用内置 tomcat-manager 监控配置,或者使用类似工具:psi-probe
    • 使用 ps -ef | grep java,查看 PID
    • 查看堆栈情况:jstack -l PID >> /opt/jstack-tomcat1-20180917.log
    • 使用 jstat -gc PID 250 10,查看gc情况(截图)
    • 使用 jstat -gccause PID:额外输出上次GC原因(截图)
    • 使用 jmap -dump:format=b,file=/opt/dumpfile-tomcat1-20180917 PID,生成堆转储文件
      • 使用 jhat 或者可视化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)分析堆情况。
    • 结合代码解决内存溢出或泄露问题。

CPU 低,负载高,访问慢(带数据库)

  • 基于上面,但是侧重点在于 I/O 读写,以及是否有 MySQL 死锁,或者挂载了 NFS,而 NFS Server 出现问题
  • mysql 下查看当前的连接数与执行的sql 语句:show full processlist;
  • 检查慢查询日志,可能是慢查询引起负载高,根据配置文件查看存放位置:log_slow_queries
  • 查看 MySQL 设置的最大连接数:show variables like 'max_connections';
    • 重新设置最大连接数:set GLOBAL max_connections=300

你可能感兴趣的:(Linux 服务器故障排查顺序)