Linux——性能调优工具一览

一、CPU

1.调优工具

根据指标找工具

|------------|----------------------------------|-----------------------------------------------------------------|
| 性能指标 | 工具 | 说明 |
| 平均负载 | uptime、top | uptime最简单、top提供了更全的指标 |
| 系统整体CPU使用率 | vmstat、mpstat、top、sar、/proc/stat | top、vmstat、mpstat只可以动态查看,而sar还可以记录历史数据 /proc/stat是其他性能工具的数据来源 |
| 进程CPU使用率 | top、pidstat、ps、htop、atop | top和ps可以按CPU使用率给进程排序,而pidstat只显示实际用了CPU的进程,htop和atop以不同颜色显示更为直观 |
| 系统上下文切换 | vmstat | 除了上下文切换此时,还提供运行状态和不可中断状态进程的数量 |
| 进程上下文切换 | pidstat | 注意加上-w选项 |
| 软中断 | top、/proc/softirqs、mpstat | top提供软中断CPU使用率,而/proc/softirqs和mpstat提供了各种软中断在每个CPU上的运行次数 |
| 硬中断 | vmstat、/proc/interrupts | vmstat提供总的中断次数,而/proc/interrupts提供各种中断在每个CPU上的运行的累积次数 |
| 网络 | dstat、sar、tcpdump | dstat和sar提供总的网络接收和发送情况,而tcpdump则是动态抓取正在进行的网络通讯 |
| I/O | dstat、sar | dstat和sar都提供了I/O的整体情况 |
| CPU个数 | /proc/cpuinfo、lscpu | lscpu更直观一些 |
| 事件剖析 | perf、execsnoop | perf可以用来分析CPU的缓存以及内核调用链,execsnoop用来监控短时进程 |

根据工具查指标

|------------------|----------------------------------------------|
| 性能工具 | 性能指标 |
| uptime | 平均负载 |
| top | 平均负载、运行队列、整体的CPU使用率以及每个进程的状态和CPU使用率 |
| htop | top增强版,以不同颜色区分不同类型的进程,更直观 |
| atop | CPU、内存、磁盘和网络等各种资源的全面监控 |
| vmstat | 系统整体的CPU使用率、上下文切换次数、中断次数,还包括处于运行和不可中断状态的进程数量 |
| mpstat | 每个CPU的使用率和软中断次数 |
| pidstat | 进程和线程的CPU使用率、中断上下文切换次数 |
| /proc/softirqs | 软中断类型和在每个CPU上的累积中断次数 |
| /proc/interrupts | 硬中断类型和在每个CPU上的累积中断次数 |
| ps | 每个进程的状态和CPU使用率 |
| pstree | 进程的父子关系 |
| dstat | 系统整体的CPU使用率 |
| sar | 系统整体的CPU使用率,包括可配置的历史数据 |
| strace | 进程的系统调用 |
| perf | CPU性能时间剖析,如调用链分析、CPU缓存、CPU调度等 |
| execsnoop | 监控短时进程 |

2.CPU性能瓶颈

3.从不同的角度看待CPU调优

如何才能降低 CPU 使用率,提高 CPU 的并行处理能力,大体分析方向为两部分

|----------|-----------------------------------|
| 应用程序 | 系统优化 |
| 编译器优化 | CPU绑定 |
| 算法优化 | CPU独占 |
| 异步处理 | 优先级调整 |
| 多线程代替多进程 | 为进程设置资源限制 |
| 善用缓存 | NUMA(Non-Uniform Memory Access)优化 |
| | 中断负载均衡 |

二、磁盘

1.磁盘性能指标

使用率:指磁盘处理 I/O 的时间百分比

饱和度:指磁盘处理 I/O 的繁忙程度

IOPS:指每秒的 I/O 请求数

吞吐量:指每秒的 I/O 请求大小

响应时间:指 I/O 请求从发出到收到响应的间隔时间

2.调优工具

根据工具查指标

|-----------------|----------------------------------------|
| 性能工具 | 文件系统和I/O性能指标 |
| iostat | 磁盘I/O使用率、IOPS、吞吐量、响应时间、I/O平均大小以及等待队列长度 |
| pidstat | 进程I/O大小以及I/O延迟 |
| sar | 磁盘I/O使用率、IOPS、吞吐量以及响应时间 |
| dstat | 磁盘I/O使用率、IOPS以及吞吐量 |
| iotop | 按I/O大小对进程排序 |
| slabtop | 目录项、索引节点以及文件系统的缓存 |
| /proc/slabinfo | 目录项、索引节点以及文件系统的缓存 |
| /proc/meminfo | 页缓存和可回收Slab缓存 |
| /proc/diskstats | 磁盘的IOPS、吞吐量以及延迟 |
| /proc/pid/io | 进程IOPS、I/O大小以及I/O延迟 |
| vmstat | 缓存和缓冲区用量汇总 |
| blktrace | 跟踪块设备I/O事件 |
| biosnoop | 跟踪进程的块设备I/O大小 |
| biotop | 跟踪进程块I/O并按大小I/O大小排序 |
| strace | 跟踪进程的I/O系统调用 |
| perf | 跟踪内核中的I/O事件 |
| df | 磁盘空间和索引节点使用量和剩余量 |
| mount | 文件系统的挂载路径以及挂载参数 |
| du | 目录占用的磁盘空间大小 |
| tune2fs | 显示和设置文件系统参数 |
| hdparm | 显示和设置磁盘参数 |

根据指标找工具

|----------------------------------------|--------------------------|---------------------------------------------|
| 性能指标 | 工具 | 说明 |
| 文件系统空间容量、使用量以及剩余空间 | df | 查看文件系统的存储状态 |
| 索引节点容量、使用量以及剩余量 | df | 使用-i选项 |
| 页缓存和可回收Slab缓存 | /proc/meminfo、sar、vmstat | 使用sar -r选项 |
| 缓冲区 | /proc/meminfo、sar、vmstat | 使用sar -r选项 |
| 目录项、索引节点以及文件系统的缓存 | /proc/slabinfo、slabtop | slabtop更直观 |
| 磁盘I/O使用率、IOPS、吞吐量、响应时间、I/O平均大小以及等待队列长度 | iostat、sar、dstat | 使用iostat -d -x或sar -d选项 |
| 进程I/O大小以及I/O延迟 | pidstat、iotop | 使用pidstat -d选项 |
| 块设备I/O事件跟踪 | blktrace | 示例:blktrace -d /dev/sda -o- | blkparse -i- |
| 进程I/O系统调用跟踪 | strace | 通过系统调用跟踪进程的I/O |
| 进程块I/O系统调用跟踪 | biosnoop、biotop | 需要安装bcc软件包 |

iostat使用详解:iostat 命令详解_iostat命令详解参数-CSDN博客

三、网络

1.网络性能指标

带宽:表示链路的最大传输速率,单位通常为 b/s (比特 / 秒)。

吞吐量,表示单位时间内成功传输的数据量,单位通常为 b/s(比特 / 秒)或者 B/s(字节 / 秒)。吞吐量受带宽限制,而吞吐量 / 带宽,也就是该网络的使用率。

延时,表示从网络请求发出后,一直到收到远端响应,所需要的时间延迟。在不同场景中,这一指标可能会有不同含义。比如,它可以表示,建立连接需要的时间(比如 TCP 握手延时),或一个数据包往返所需的时间(比如 RTT)。

PPS,是 Packet Per Second(包 / 秒)的缩写,表示以网络包为单位的传输速率。PPS 通常用来评估网络的转发能力,比如硬件交换机,通常可以达到线性转发(即 PPS 可以达到或者接近理论最大值)。而基于 Linux 服务器的转发,则容易受网络包大小的影响。

2.分析工具

通过sarifconfig命令查看Vastbase内节点网络使用情况,分析是否存在由于网络导致的性能瓶颈。

  • errors表示收包错误的总数量。
  • dropped表示数据包已经进入了Ring Buffer,但是由于内存不够等系统原因,导致在拷贝到内存的过程中被丢弃的总数量。
  • overruns表示Ring Buffer队列中被丢弃的报文数目,由于Ring Buffer(aka Driver Queue)传输的IO大于kernel能够处理的IO导致。

分析时,如果发现上述三个值持续增长,则表示网络负载过大或者存在网卡、内存等硬件故障。

3.详细排查

排查网络状态使用netstat -anp | grep命令

标记所在情况;

一个叫"redis-server"的进程,正在监听127.0.1:6379/0.0.0.:2222端口等等,"LISTEN"表示监听 PID:代表该进程的id 38464

检查特定程序的网络链接情况

查看端口 : 例如 5432端口我们看下

netstat -anp | grep 5432

相关推荐
眠修22 分钟前
Kuberrnetes 服务发布
linux·运维·服务器
好奇的菜鸟1 小时前
Docker 配置项详解与示例
运维·docker·容器
xcs194052 小时前
集运维 麒麟桌面版v10 sp1 2403 aarch64 离线java开发环境自动化安装
运维·自动化
BAOYUCompany2 小时前
暴雨服务器成功中标华中科技大学集成电路学院服务器采购项目
运维·服务器
超龄超能程序猿2 小时前
Bitvisse SSH Client 安装配置文档
运维·ssh·github
奈斯ing3 小时前
【Redis篇】数据库架构演进中Redis缓存的技术必然性—高并发场景下穿透、击穿、雪崩的体系化解决方案
运维·redis·缓存·数据库架构
鳄鱼皮坡3 小时前
仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器
运维·服务器
即将头秃的程序媛3 小时前
centos 7.9安装tomcat,并实现开机自启
linux·运维·centos
fangeqin3 小时前
ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
linux·python·ubuntu·openssl
小Mie不吃饭4 小时前
FastAPI 小白教程:从入门级到实战(源码教程)
运维·服务器