• 性能测试-pidstat 问题定位分析


    pidstat 概述

    pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
    常用的参数 解释
    -u  默认的参数,显示各个进程的cpu使用统计
     -r 显示各个进程的内存使用统计
    -d 显示各个进程的IO使用情况 
    -p 指定进程号
    -w 显示每个进程的上下文切换情况
    -t  显示选择任务的线程的统计信息外的额外信息
    -T{TASK或CHILD或ALL}   这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。
    -V 版本号
    -h  在一行上显示了所有活动,这样其他程序可以容易解析
     -I(大写的i) 在SMP环境,表示任务的CPU使用率/内核数量
    -l  显示命令名和所有参数
    正确使用该命令 要理解几个特殊的字段:
    名称 解释
    pid 进程ID
    lwp 线程ID。在用户态的命令(比如ps)中常用的显示方式
    tid 线程ID,等于lwp。tid在系统提供的接口函数中更常用,比如syscall(SYS_gettid)和syscall(__NR_gettid)
    tgid 线程组ID,也就是线程组leader的进程ID,等于pid。
    pgid 进程组ID,也就是进程组leader的进程ID。
    pthread id pthread库提供的ID,生效范围不在系统级别,可以忽略。
    sid session ID for the session leader。
    tpgid tty process group ID for the process group leader
    下面介绍一下各个命令 返回字段的含义:
    pidstat -u -p pid

     

    PID:进程ID
    %usr:进程在用户空间占用cpu的百分比
    %system:进程在内核空间占用cpu的百分比
    %guest:进程在虚拟机占用cpu的百分比
    %CPU:进程占用cpu的百分比
    CPU:处理进程的cpu编号
    Command:当前进程对应的命令
    pidstat -r -p pid

     

    PID:进程标识符
    Minflt/s:任务每秒发生的次要错误,不需要从磁盘中加载页
    Majflt/s:任务每秒发生的主要错误,需要从磁盘中加载页
    VSZ:虚拟地址大小,虚拟内存的使用KB
    RSS:常驻集合大小,非交换区五里内存使用KB
    Command:task命令名
    pidstat -d -p pid

       

    PID:进程id
    kB_rd/s:每秒从磁盘读取的KB
    kB_wr/s:每秒写入磁盘KB
    kB_ccwr/s:任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。
    COMMAND:task的命令名
    pidstat -w -p pid

      

    PID:进程id
    Cswch/s:每秒主动任务上下文切换数量
    Nvcswch/s:每秒被动任务上下文切换数量
    Command:命令名
    pidstat -t -p pid

      

    TGID:主线程的表示
    TID:线程id
    %usr:进程在用户空间占用cpu的百分比
    %system:进程在内核空间占用cpu的百分比
    %guest:进程在虚拟机占用cpu的百分比
    %CPU:进程占用cpu的百分比
    CPU:处理进程的cpu编号
    Command:当前进程对应的命令
    pidstat -T ALL -p pid

      

    PID:进程id
    Usr-ms:任务和子线程在用户级别使用的毫秒数。
    System-ms:任务和子线程在系统级别使用的毫秒数。
    Guest-ms:任务和子线程在虚拟机(running a virtual processor)使用的毫秒数。
    Command:命令名
    

    性能分析案例

    这里以分析的java程序的为案例:

    • 1、查找到你所观察程序的进程号

           

    jps -l

      

    • 2、获取进程pid之后 查看该进程的cpu 使用情况:
     pidstat -u -p 15173 1

      

    • 3、 假如该进程的cpu使用率过高 通过更细粒度的命令进行观察: 
    pidstat -t -p 15173 1

      

    • 4、定位到占用cpu使用频率过高的线程 例如上图(这里是假如)15181 然后通过 jstack - l 15181 >/tmp/15181.txt 将线程数据导出 即可分析结果
    • 5、这个方法可以很准确的定位到是java的那个方法出了问题 占用cpu过高

      

  • 相关阅读:
    中文短文本分类
    词袋和词向量模型
    【NLP-2017-SA】翻译-Recurrent Attention Network on Memory for Aspect Sentiment Analysis(2017emnlp)
    过拟合和欠拟合问题总结
    【Docker-6】-Docker删除运行过的镜像
    【Docker-5】-Docker运行自己的镜像
    【Docker-3】-Docker入门命令解读
    【Docker-4】-Docker启动nginx
    【Docker-2】windows下安装docker
    【Docker-1】docker简介
  • 原文地址:https://www.cnblogs.com/emars/p/12145101.html
Copyright © 2020-2023  润新知