• Linux CPU调优工具汇总


    Linux CPU调优工具汇总

    top

    得到系统实时资源使用状态,最近3s数据,可以排序
    top -p:查看指定进程id的top信息,例如:
    top -p 12793

    top -H -p:查看指定进程id的所有线程的top信息
    top -H -p 27376

    strace

    跟踪程序运行的情况

    1. 监控用户进程与内核进程的交互
    2. 追踪进程的系统调用、信号传递、状态变化
    参数解释
    -c统计每一系统调用的所执行的时间,次数和出错的次数等
    -d输出strace关于标准错误的调试信息
    -f跟踪由目标进程及调用所产生的子进程
    -F尝试跟踪目标调用 在-f时,vfork不被跟踪
    -a设置返回值的输出位置.默认 为40
    -r打印出相对时间关于每一个系统调用
    -t在每行输出的后面,显示调用花费时间
    -tt在每行输出的前面,显示调用花费毫秒级别的时间
    -T每次系统调用所花费的时间
    -v对某些相关调用,把完整的环境变量、文件stat结构打印出来
    -p pid指定要跟踪的进程pid,同时跟踪的多个pid,重复多次-p选项即可
    -o filename: 将跟踪输出写入文件名
    -s当系统调用的某个参数是字符串时,最多输出制定长度的内容,默认时32个字节
    -e set仅跟踪某些系统调用
    -e open,close仅跟踪打开/关闭系统调用
    -e file仅跟踪文件系统调用/文件操作相关的
    -e process跟踪所有涉及流程管理的系统调用
    -e network跟踪所有与网络相关的系统调用
    -e signal跟踪所有与信号相关的系统调用
    -e ipc跟踪所有与ipc相关的系统调用
    -e desc跟踪所有与文件描述符相关的系统调用
    -e memory跟踪所有与内存映射相关的系统调用
    -e set仅跟踪指定的信号子集

    pstree

    将所有进程以树状图显示,树状图将会以 pid (如果有指定) 或是以 init 这个基本进程为根 (root),如果有指定使用者 id,则树状图会只显示该使用者所拥有的进程。

    参数解释
    -a显示启动每个进程对应的完整指令,包括启动进程的路径、参数等。
    -c不使用精简法显示进程信息,即显示的进程中包含子进程和父进程。
    -n根据进程 PID 号来排序输出,默认是以程序名排序输出的。
    -p显示进程的 PID。
    -u显示进程对应的用户名称。

    ps

    进程在整个生命周期的数据信息, 展示当前进程的信息,以列表呈现

    参数解释
    a显示所有进程
    -a显示同一终端下的所有程序
    -A显示所有进程
    c显示进程的真实名称
    -N反向选择
    -e等于“-A”
    e显示环境变量
    f显示程序间的关系
    -H显示树状结构
    r显示当前终端的进程
    T显示当前终端的所有程序
    u指定用户的所有进程
    -au显示较详细的资讯
    -aux显示所有包含其他使用者的行程
    -C<命令>列出指定命令的状况
    –lines<行数>每页显示的行数
    –width<字符数>每页显示的字符数
    –help显示帮助信息
    –version显示版本显示

    mpstat

    mpstat的全称为Multiprocessor Statistics,是一款常用的多核CPU性能分析工具,用来实时查询每个CPU的性能指标,以及所有CPU的平均指标
    mpstat [-P {|ALL}] [internal [count]]

    参数解释
    -P{ALL}
    internal相邻的两次采样的间隔时间
    count采样的次数,count只能和delay一起使用

    各字段含义

    参数解释
    centered 文本居中right-aligned 文本居右
    %usr在internal时间段里,用户态占用CPU的时间(%),不包含nice值为负的进程
    %nice在internal时间段里,nice值为负的进程占用CPU的时间(%)
    %sys在internal时间段里,内核态占用CPU的时间(%)
    %iowait在internal时间段里,等待IO占用CPU的时间(%)
    %irq在internal时间段里,硬中断占用CPU的时间(%)
    %soft在internal时间段里,软中断占用CPU的时间(%)
    %guestCPU处理虚拟进程花费的时间开销
    %idle在internal时间段里,空闲CPU的时间(%)

    vmstat

    vmstat主要是用来检测虚拟内存的,可以展现给定时间间隔的服务器的状态值,包括CPU使用率,内存使用率,虚拟内存交换情况,IO读写情况等。一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数

    参数解释
    -a显示活跃和非活跃内存
    -f显示从系统启动至今的fork数量
    -m显示slabinfo
    -s显示内存相关统计信息及多种系统活动数量
    -d显示磁盘相关的统计信息
    -S使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(Byte),默认单位为K(1024 Bytes)
    delay刷新时间间隔,如果不指定,只显示一条结果
    count刷新次数,如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷

    解决CPU瓶颈的办法如下:

    1. 增加CPU个数或核数(推荐)
    2. 调整任务的执行时间,如把大任务放到系统不繁忙的时候进行,进而平衡系统的任务。
    3. 调整已有任务的优先级

    通过vmstat识别CPU满负荷:

    首先需要声明一点的是,vmstat中CPU的度量是百分比的。当us+sy的值接近100的时候,表示CPU正在接近满负荷工作。但要注意的是,CPU满负荷工作并不能说明什么,Linux总是试图要CPU尽可能的繁忙,使得任务的吞吐量最大化。唯一能够确定CPU瓶颈的还是r(运行队列)的值。

    通过vmstat识别内存瓶颈:

    当内存的需求大于实际的物理内存时,服务器就会启动虚拟内存机制,通过虚拟内存,可以将内存段移到SWAP DISK的特殊磁盘段上,这样就会出现虚拟内存的页导入和页导出现象。页导出并不能说明出现了内存瓶颈,虚拟内存系统经常会对内存段进行页导出,但是页导入操作就表明服务器需要更多的内存了, 页导入需要从SWAP DISK上将内存段复制回内存,导致服务器速度变慢。

    解决内存瓶颈的办法如下:

    1. 最简单的,增加内存(推荐)
    2. 改小SGA,使得对内存的需求减少
    3. 改小PGA,使得对内存的需求减少

    小结:

    mpstat和vmstat命令的差别:mpstat可以显示每个CPU的统计信息,而vmstat只显示所有CPU的统计信息。因此,编写糟糕的应用程序(不使用多线程体系结构)可能会运行在一个多处理器机器上,而不使用所有处理器。从而导致一个 CPU 过载,而其他 CPU 却很空闲。通过 mpstat 可以轻松诊断这些类型的问题
    vmstat中所有关于CPU的总结都适合mpstat。当您看到较低的 %idle 数字时,就知道出现了 CPU 不足的问题。当您看到较高的 %iowait 数字时,就知道在当前负载下等待IO严重

    sar

    可以全面地获取系统的 CPU、运行队列、磁盘读写(I/O)、分区(交换区)、内存、CPU 中断和网络等性能数据。

    sar [options] [-o filename] interval [count]
    
    • 1

    -o filename:其中,filename 为文件名,此选项表示将命令结果以二进制格式存放在文件中;
    interval:表示采样间隔时间,该参数必须手动设置;
    count:表示采样次数,是可选参数,其默认值为 1;
    options:

    参数解释
    -A显示系统所有资源设备(CPU、内存、磁盘)的运行状况。
    -u显示系统所有 CPU 在采样时间内的负载状态。
    -P显示当前系统中指定 CPU 的使用情况。
    -d显示系统所有硬盘设备在采样时间内的使用状态。
    -r显示系统内存在采样时间内的使用情况。
    -b显示缓冲区在采样时间内的使用情况。
    -v显示 inode 节点、文件和其他内核表的统计信息。
    -n显示网络运行状态,此选项后可跟 DEV(显示网络接口信息)、EDEV(显示网络错误的统计数据)、SOCK(显示套接字信息)和 FULL(等同于使用 DEV、EDEV和SOCK)等,有关更多的选项,可通过执行 man sar 命令查看。
    -q显示运行列表中的进程数、进程大小、系统平均负载等。
    -R显示进程在采样时的活动情况。
    -y显示终端设备在采样时间的活动情况。
    -w显示系统交换活动在采样时间内的状态。

    pidstat

    pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程

    pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]
    
    • 1
    参数解释
    -u默认的参数,显示各个进程的cpu使用统计
    -r显示各个进程的内存使用统计
    -d显示各个进程的IO使用情况
    -p指定进程号
    -w显示每个进程的上下文切换情况
    -t显示选择任务的线程的统计信息外的额外信息
    -V版本号
    -h在一行上显示了所有活动,这样其他程序可以容易解析。
    -I在SMP环境,表示任务的CPU使用率/内核数量
    -l显示命令名和所有参数

    注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。

    perf

    用来进行软件性能分析的工具,可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计,用来分析内核和应用程序的性能。

    taskset

    用于设置进程(或 线程)的处理器亲和性(Processor Affinity),可以将进程(或 线程)绑定到特定的一个 或 多个CPU上去执行,而不允许将进程(或 线程)调度到其他的CPU上。

  • 相关阅读:
    梦中情盘!基于NextCloud搭建个人私有云!
    网络编程的原理和基础概念
    模型评估与选择
    基于Java的民宿管理系统设计与实现(源码+lw+部署文档+讲解等)(民宿预约、民宿预订、民宿管理、酒店预约通用)
    GoLang连接mysql数据库
    MT1283·区间Disarium数
    【C++】使用ort推理yolov10
    idea Maven Helper插件使用方法
    Crypto(3)NewStarCTF 2023 公开赛道 WEEK2|Crypto-不止一个pi
    (Java高级教程)第一章Java多线程基础-第一节1:多线程概念和Java中创建线程的方式
  • 原文地址:https://blog.csdn.net/wangxiandou/article/details/126323281