一、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.分析工具
通过sar
或ifconfig
命令查看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