博客
关于我
Linux 问题故障定位的技巧大全
阅读量:793 次
发布时间:2023-02-02

本文共 1873 字,大约阅读时间需要 6 分钟。

背景

有时在分析系统性能问题时,监控插件无法快速定位根源。这时需要结合服务器端深入分析,并结合经验,仅有一套好工具才能事半功倍,方便更高效地定位问题。

问题定位的方法学

采用5W(What、When、Why、Where、How)结合H(How to do)的方法,提出性能分析问题:

  • What:现象是什么样
  • When:什么时候发生
  • Why:为什么会发生
  • Where:发生的问题具体地点
  • How much:耗费了多少资源
  • How to do:解决问题的方法
  • CPU分析

  • 内核CPU调度器功能和性能问题
  • 线程状态分析:
    • on-CPU:执行中,分为用户态(user)和系统态(sys)
    • off-CPU:等待下一轮CPU或I/O等状态,可细分为可执行、匿名换页、睡眠、锁、空闲等
  • 需要理解以下概念:

    • 处理器
    • 硬件线程
    • CPU内存缓存
    • 时钟频率
    • 每指令周期数(CPI)和每周期指令数(IPC)
    • CPU指令
    • 使用率
    • 用户时间/内核时间
    • 调度器
    • 运行队列
    • 抢占
    • 多进程多线程
    • 字长

    分析工具

    • uptime、vmstat、mpstat、top、pidstat用于查询CPU及负载情况
    • perf用于跟踪进程内部函数耗时

    使用方式

    • 查看系统CPU使用情况:top
    • 查看所有CPU核信息:mpstat -P ALL 1
    • 查看进程CPU统计信息:vmstat 1
      -跟踪进程内部函数级CPU使用情况:perf top -p pid -e cpu-clock

    内存分析

  • 内存为提高效率而生,内存问题不仅影响性能
  • 理解以下概念:主存、虚拟内存、常驻内存、地址空间、OOM、页缓存、缺页、换页、交换空间、交换、用户分配器(如libc、glibc、libmalloc、mtmalloc)、LINUX内核级SLUB分配器
  • 分析工具

    • free、vmstat、top、pidstat、pmap用于统计内存信息
    • valgrind用于内存泄漏检测
    • dtrace动态跟踪需要对内核函数有深入了解

    使用方式

    • 查看系统内存使用:free -m
    • 查看虚拟内存统计:vmstat 1
    • 查看进程内存映像信息:pmap -d pid

    磁盘IO分析

  • 磁盘是计算机中最慢的子系统,最容易出现性能瓶颈
  • 理解概念:文件系统(VFS)、文件系统缓存、页缓存、目录缓存、inode、inode缓存、noop调用策略
  • 分析工具

    • iotop:查看详细IO信息
    • iostat:查看系统IO统计

    使用方式

    • 查看系统IO信息:iotop
    • 统计IO详细信息:iostat -d -x -k 1 10

    网络分析

  • 网络监测复杂度大,需了解延迟、阻塞、冲突、丢包等因素
  • 自适应网卡根据网络环境自动调整
  • 分析工具

    • netstat用于显示网络连接状态
    • sar用于查看网络性能指标

    使用方式

    • 查看网络统计信息:netstat -s
    • 查看UDP连接状况:netstat -nu

    系统负载分析

  • 负载指的是计算机执行多少工作(Load Average是1分钟、5分钟、15分钟的平均值)
  • 分析工具:uptime、top、vmstat
  • 使用方式

    • 查看负载情况:uptimetop
    • 统计系统调用耗时:vmstat
    • 跟踪指定系统操作:strace -c -p pid

    火焰图分析

  • 火焰图展示CPU调用栈,y轴为调用栈深度(函数层级),x轴为抽样次数
  • 常用类型:on-CPU、off-CPU、Memory、Hot/Cold、Differential
  • 火焰图安装与使用

    • 安装systemtap:yum install systemtap systemtap-runtime
    • 生成火焰图:perf record -F 99 -p pid -g -- sleep 30 perf script > out.stacks1

    示例火焰图DEMO

    • Corsairs-mage-tilting-joystick图形展示cpu占用情况

    内存级别火焰图

    分析内存泄漏问题,使用火焰图可快速定位内存分配问题

    性能红蓝差分火焰图

    通过比对修改前后火焰图,快捷定位性能变化原因

    案例分析

  • Nginx集群500+异常
    • 通过监控插件发现499、5xx状态码
    • Cpu使用率升高
  • 分析工具使用

  • Top观察系统指标:top
  • perf分析进程内部:perf top -p pid
  • 火焰图显示json解析和内存操作占用CPU,发现解析json库性能问题

    总结

    • 通过火焰图定位code问题,优化代码性能

    网络安全学习

  • 专业知识体系完整化
  • 学习视频教程覆盖网络安全法、渗透测试、漏洞详解等
  • 转载地址:http://wgwfk.baihongyu.com/

    你可能感兴趣的文章
    Linux_常用命令简单介绍(netstat,awk,top,tail,head,less,more,cat,nl)
    查看>>
    Linux_服务器_01_查看公网IP
    查看>>
    Linux——gcc编译器
    查看>>
    Linux——gdb调试
    查看>>
    Linux——Makefile和文件时间
    查看>>
    Linux——vim编辑器
    查看>>
    Linux——vi命令详解
    查看>>
    Linux——入门命令
    查看>>
    Linux——共享内存
    查看>>
    Linux——利用命名管道创建进程池
    查看>>
    Linux——动态库
    查看>>
    Linux——匿名管道
    查看>>
    Linux——命令行参数及环境变量
    查看>>
    Linux——命名管道
    查看>>
    Linux——基本指令
    查看>>
    Linux——基础入门(1)
    查看>>
    Linux——基础入门(2)
    查看>>
    Linux——文件的系统调用
    查看>>
    Linux——磁盘和文件系统(一)
    查看>>
    Linux——缓冲区与FLIE*的原理简单实现
    查看>>