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

相关推荐
Yz987626 分钟前
Hive安装-内嵌模式
大数据·linux·数据仓库·hive·hadoop·hdfs·bigdata
多练项目36 分钟前
公开仓库改私有再配置公钥后Git拉取仍需要输入用户名的问题
运维·git
cqbzcsq1 小时前
Nginx简易配置将内网网站ssh转发到外网
运维·nginx·ssh
SmallBambooCode2 小时前
【人工智能】阿里云PAI平台DSW实例一键安装Python脚本
linux·人工智能·python·阿里云·debian·脚本·模型训练
纯小白是我2 小时前
CentOS 7系统中更改YUM源为阿里云的镜像源
linux·阿里云·centos
嵌入式Linux,2 小时前
BUG: scheduling while atomic
linux·运维·服务器·bug
小兔子酱#2 小时前
【Linux 29】传输层协议 - UDP
linux·运维·服务器·网络·网络协议·udp
CYRUS_STUDIO2 小时前
Android下的系统调用 (syscall),内联汇编syscall
android·linux·汇编语言
想不到好名字了()2 小时前
负载均衡式在线oj项目开发文档2(个人项目)
linux·网络·c++
liuhaoodng6262 小时前
浮动路由:实现出口线路的负载均衡冗余备份。
运维·网络·网络协议·负载均衡