• Linux | 性能问题排查


    相关指令快速索引

    希望查看的信息指令示例
    系统进程列表ps -ef | grep 进程名ps -ef | grep java
    系统资源占用较高的进程与它们占用资源的概览top常用
    进程运行、内存、cpu情况的实时统计vmstat 采样间隔 采样次数vmstat 1 5
    上电时间 & CPU 负载系数uptime就是 top 的第一行
    CPU 各个核的资源占用统计mpstat -P ALL 采样间隔mpstat -P ALL 1信息类似 vmstat 的 CPU 部分
    进程状态实时统计pidstat 监控项 -p 进程号 采样间隔 采样次数pidstat -u -r -p 1114 1 5常用监控项
    -u cpu
    -r 内存
    -d IO
    -w 上下文切换
    -t 线程
    线程状态实时统计pidstat -t -p 进程号 采样间隔 采样次数pidstat -u -t -p 1114 1 5
    线程状态统计ps -mp 进程号 -o THREAD,tid,timeps -mp 1114 -o THREAD,tid,time可以指定输出格式
    可用内存free -m推荐使用 -m,以 MB 为单位统计
    查看磁盘可用dfdf -h
    磁盘 IO 实时统计iostat -xdk 采样间隔 采样次数iostat -xdk 1 5
    网络 IO 实时统计ifstat -tT 采样间隔 采样次数ifstat -tT 1-t 增加时间列,-T 增加统计列

    指令

    ps -ef | grep 进程名 查看进程信息
    在这里插入图片描述
    ps -mp 进程号 -o THREAD,tid,time 查看某进程下各线程的信息
    在这里插入图片描述

    通常关注的信息

    • PID
    • 命令行参数
    • %CPU + TID,常用于定位占用资源的线程

    详见 Linux | 进程管理 & 服务管理

    top 系统进程监控
    在这里插入图片描述
    需要关注的信息

    • 系统的平均负载是否过大
    • 每个进程的 %CPU %MEM 是否有过大

    详见 Linux | 进程管理 & 服务管理

    vmstat 采样间隔 采样次数 进程运行、内存、cpu情况的实时统计
    在这里插入图片描述
    vmstat = VirtualMeomoryStatistics
    信息说明:

    • procs 进程信息
      • r 运行中等待 CPU 的 进程数
        通常认为达到并超过 CPU 核心数 2 倍时,系统压力过大
      • b 阻塞(等待资源)中进程数
    • memory 内存信息
      • swpd 使用的虚拟内存大小
      • free 可用内存大小
      • buff 作为缓冲区使用的内存大小
      • cache 作为缓存使用的内存大小
    • swap 交换区信息
      swap 只有在内存不够用的时候才会启用
      启用后在内存和硬盘之间做交换,相当于虚拟内存
      此时,下面两个参数才不是 0
      • si 交换区读速度( 磁盘 -> 内存 的速度),KB
      • so 交换区写速度( 内存 -> 磁盘 的速度),KB
    • io 读写信息
      • bi 交换区每秒读块数
      • bo 交换区每秒写块数
    • system
      下面两个参数大,说明系统内核消耗了较多的 CPU 时间,而没有处理 app 业务,这些时间算是浪费的
      • in 中断平均数,次/s,包括时钟中断
      • cs 上下文切换平均数,次/s
    • cpu
      • us 用户进程执行的时间比例
        通常认为长期 > 50,表示需要优化算法或加速
      • sy 内核系统进程执行的时间比例
        通常认为长期较高,表示大量 CPU 时间被系统内核浪费
        通常认为长期 (us + sy) > 80,表示 CPU 资源不足
      • id 空闲的时间比例
      • wa IO 等待的时间比例
        通常认为长期 > 30,表示 IO 等待严重
        可能由大量磁盘随机访问,或磁盘带宽限制导致
      • st 虚拟机所盗用的时间比例

    通常关注的信息

    • procs -r 的数量是否过多
      通常认为阈值是 (CPU 核心数 * 2)
    • memory -free 是否过少
      还要结合 swap 区,
      memory -free 很少,说明内存不富裕
      memory -free 很少,同时 swap -si/so 不是 0 ,说明内存不够用
    • cpu -us/sy/wa 是否过高

    uptime 系统上电时间与 CPU 负载系数
    在这里插入图片描述
    通常关注的信息:CPU 负载系数

    mpstat -P ALL 采样间隔 CPU 各个核的资源占用统计
    在这里插入图片描述
    mpstat = Multiprocessor Statistics
    通常关注的信息:类似 vmstat

    pidstat -u 1 -p 进程号 进程状态统计
    在这里插入图片描述
    在这里插入图片描述

    通常关注的信息:

    • 按不同的监控项,关注内容不同
    • 关注 CPU(-u) 时,通常注意 CPU 使用率
    • 关注 线程(-t) 时,通常注意 tid,一般是在排除性能问题时关注

    free -m 内存使用统计
    在这里插入图片描述
    通常关注的信息

    • 内存使用率
      通常服务器内存使用率在 [20,70]

    df -h 查看磁盘可用
    在这里插入图片描述
    通常关注的信息:各磁盘使用率

    iostat -xdk 采样间隔 采样次数 磁盘 IO 实时统计
    在这里插入图片描述
    通常关注的信息:

    • rkB/s、wkB/s 是否出现长期过大
      如果是,则需要优化程序读写速度
    • await 是否过高
      await 与 svctm 的值接近时,说明 IO 几乎不用等待,磁盘性能良好
      await 远高于 svctm 时,说明 IO 等待队列太长需要优化或更换更快磁盘
    • util 是否过高
      util 表示每秒 IO 所占时间的比例
      过高表示磁盘带宽全被占用,需要优化或添加磁盘

    ifstat -xdk 采样间隔 采样次数 网络 IO 实时统计
    在这里插入图片描述
    安装指令

    wget http://gael.roualland.free.fr/ifstat/ifstat-1.1.tar.gz
    tar -xvf ifstat-1/1/tar/gz
    cd ifstat-1.1
    ./configure
    make
    make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    通常关注的信息:各个网卡 IO 是否过高

    JVM 性能工具

    参考 基础 | JVM - [指令 & 性能监控]

    排查思路

    以 CPU 飙高为例

    • 定位占用资源的进程
      可以使用 topps -efjps 定位进程
    • 定位占用资源的线程
      可以使用下面方式进行定位
      • pidstat -t -p 进程号
      • ps -mp 进程号 -o THREAD,tid,time 可以自定义字段
    • 定位问题代码
      通过 jstack 进程号 | grep 线程号(16进制表示) A 行数 定位
  • 相关阅读:
    自动排版与语种转换工具
    Docker实践经验:Docker 上部署 mysql8 主从复制
    【AI Business Model】人工智能的定义 | 了解 AI 的历史 | 简单理解什么是 “图灵测试“
    Web容器和Servlet容器、Spring和SpringMvc
    CSS 基础知识-02
    Elasticsearch:验证 Elasticsearch Docker 镜像并安装 Elasticsearch
    驱动开发2 CoetexA7核 字符设备驱动(LED亮灯)(单独映射寄存器实现+封装结构体映射实现)
    常见排序算法要点
    CF1324F题解
    【游戏建模全流程】Maya风格化模型制作教程
  • 原文地址:https://blog.csdn.net/ZEUS00456/article/details/126597131