找回密码
 立即注册

QQ登录

只需一步,快速开始

主机交流Megalayer兑换位02兑换位03
兑换位04兑换位05兑换位06兑换位07
查看: 411|回复: 0

[Linux/Centos/Ubuntu] Linux性能调优CPU方面

[复制链接]

602

主题

59

回帖

2790

积分

超级版主

积分
2790

最佳新人活跃会员热心会员推广大使宣传大使灌水之王突出贡献优秀版主荣誉管理论坛元老

发表于 2020-8-12 21:32:02 | 显示全部楼层 |阅读模式
本帖最后由 Globaldc 于 2020-8-12 21:39 编辑

系统平均负载升高的原因

一般来说,系统平均负载升高意味着 CPU 使用率上升。但是他们没有必然联系,CPU 密集型计算任务较多一般系统平均负载会上升,但是如果 IO 密集型任务较多也会导致系统平均负载升高但是此时的 CPU 使用率不一定高,可能很低因为很多进程都处于不可中断状态,等待 CPU 调度也会升高系统平均负载。

所以假如我们系统平均负载很高,但是 CPU 使用率不是很高,则需要考虑是否系统遇到了 IO 瓶颈,应该优化 IO 读写速度。

所以系统是否遇到 CPU 瓶颈需要结合 CPU 使用率,系统瓶颈负载一起查看(当然还有其他指标需要对比查看,下面继续讲解)

案例问题排查

stress是一个施加系统压力和压力测试系统的工具,我们可以使用stress工具压测试 CPU,以便方便我们定位和排查 CPU 问题。

yum install stress // 安装stress工具
stress 命令使用// --cpu 8:8个进程不停的执行sqrt()计算操作
// --io 4:4个进程不同的执行sync()io操作(刷盘)
// --vm 2:2个进程不停的执行malloc()内存申请操作
// --vm-bytes 128M:限制1个执行malloc的进程申请内存大小
stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s

CPU 使用率问题排查

总结一下 CPU 使用率问题及排查思路:

  • 用户 CPU 和 Nice CPU 高,说明用户态进程占用了较多的 CPU,所以应该着重排查进程的性能问题。

  • 系统 CPU 高,说明内核态占用了较多的 CPU,所以应该着重排查内核线程或者系统调用的性能问题。

  • I/O 等待 CPU 高,说明等待 I/O 的时间比较长,所以应该着重排查系统存储是不是出现了 I/O 问题。

  • 软中断和硬中断高,说明软中断或硬中断的处理程序占用了较多的 CPU,所以应该着重排查内核中的中断服务程序。


CPU 问题排查套路CPU 使用率

CPU 使用率主要包含以下几个方面:

  • 用户 CPU 使用率,包括用户态 CPU 使用率(user)和低优先级用户态 CPU 使用率(nice),表示 CPU 在用户态运行的时间百分比。用户 CPU 使用率高,通常说明有应用程序比较繁忙。

  • 系统 CPU 使用率,表示 CPU 在内核态运行的时间百分比(不包括中断)。系统 CPU 使用率高,说明内核比较繁忙。

  • 等待 I/O 的 CPU 使用率,通常也称为 iowait,表示等待 I/O 的时间百分比。iowait 高,通常说明系统与硬件设备的 I/O 交互时间比较长。

  • 软中断和硬中断的 CPU 使用率,分别表示内核调用软中断处理程序、硬中断处理程序的时间百分比。它们的使用率高,通常说明系统发生了大量的中断。

  • 除在虚拟化环境中会用到的窃取 CPU 使用率(steal)和客户 CPU 使用率(guest),分别表示被其他虚拟机占用的 CPU 时间百分比,和运行客户虚拟机的 CPU 时间百分比。




通过性能指标查工具(CPU 相关)
性能指标
工具
说明
平均负载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 不可排序展示
htop、atop 则以不同颜色展示各类数据更直观
系统上下文切换vmstat展示上下文切换此时、运行状态、不可中断状态进程数量
进程上下文切换pidstat展示项很多,包括进程上下文切换信息
软中断top
/proc/softirqs
mpstat
top 可查看软中断 CPU 使用率
/proc/softirqs 和 mpstat 则可以查看每个 CPU 上的累计信息
硬中断vmstat
/proc/interrupts
vmstat 查看总中断次数信息
/proc/interrupts 查看各种中断在每个 CPU 核心上的累计信息
网络dstat
sar
tcpdump
dstat、sar 较详细的展示出总的网络收发情况
tcpdump 提供动态抓取数据包的能力
IOdstat、sar2 者都提供了详细的 IO 整体情况
CPU 信息/proc/cpuinfo
lscpu
都可以查看 CPU 信息
系统分析perf
execsnoop
perf 分析各种内核函数调用、热点函数信息
execsnoop 监控短时进程


根据工具查性能指标(CPU 相关)
性能工具
CPU 性能指标
uptime5、10、15 分钟内的平均负载展示
top平均负载、运行队列、CPU 各项使用率、进程状态和 CPU 使用率
htoptop 增强版,以不同颜色区分不同类型进程,展示更直观
atopCPU、内存、磁盘、网络资源全访问监控,十分齐全
vmstat系统整体 CPU 使用率、上下文切换次数、中断次数,还包括处于运行(r)和不可中断状态(b)的进程数量
pidstat进程、线程(-t)的每个 CPU 占用信息,中断上下文切换次数
/proc/softirqs展示每个 CPU 上的软中断类型及次数
/proc/inerrupts展示每个 CPU 上的硬中断类型及次数
ps每个进程的状态和 CPU 使用率
pstree进程的父子关系展示
dstat系统整体 CPU 使用率(以及相关 IO、网络信息)
sar系统整体 CPU 使用率,以及使用率历史信息
strace跟踪进程的系统调用
perfCPU 性能事件分析,例如:函数调用链、CPU 缓存命中率、CPU 调度等
execsnoop短时进程分析

CPU 问题排查方向
有了以上性能工具,在实际遇到问题时我们并不可能全部性能工具跑一遍,这样效率也太低了,所以这里可以先运行几个常用的工具 top、vmstat、pidstat 分析系统大概的运行情况然后在具体定位原因。

top 系统CPU => vmstat 上下文切换次数 => pidstat 非自愿上下文切换次数 => 各类进程分析工具(perf strace ps execsnoop pstack)

top 用户CPU => pidstat 用户CPU => 一般是CPU计算型任务

top 僵尸进程 =>  各类进程分析工具(perf strace ps execsnoop pstack)

top 平均负载 => vmstat 运行状态进程数 =>  pidstat 用户CPU => 各类进程分析工具(perf strace ps execsnoop pstack)

top 等待IO CPU => vmstat 不可中断状态进程数  => IO分析工具(dstat、sar -d)

top 硬中断 => vmstat 中断次数 => 查看具体中断类型(/proc/interrupts)

top 软中断 => 查看具体中断类型(/proc/softirqs) => 网络分析工具(sar -n、tcpdump) 或者 SCHED(pidstat 非自愿上下文切换)



CPU 问题优化方向
性能优化往往是多方面的,CPU、内存、网络等都是有关联的,这里暂且给出 CPU 优化的思路,以供参考。

程序优化
基本优化:程序逻辑的优化比如减少循环次数、减少内存分配,减少递归等等。

编译器优化:开启编译器优化选项例如gcc -O2对程序代码优化。

算法优化:降低苏研发复杂度,例如使用nlogn的排序算法,使用logn的查找算法等。

异步处理:例如把轮询改为通知方式

多线程代替多进程:某些场景下多线程可以代替多进程,因为上下文切换成本较低

缓存:包括多级缓存的使用(略)加快数据访问


系统优化
CPU 绑定:绑定到一个或多个 CPU 上,可以提高 CPU 缓存命中率,减少跨 CPU 调度带来的上下文切换问题

CPU 独占:跟 CPU 绑定类似,进一步将 CPU 分组,并通过 CPU 亲和性机制为其分配进程。

优先级调整:使用 nice 调整进程的优先级,适当降低非核心应用的优先级,增高核心应用的优先级,可以确保核心应用得到优先处理。

为进程设置资源限制:使用 Linux cgroups 来设置进程的 CPU 使用上限,可以防止由于某个应用自身的问题,而耗尽系统资源。

NUMA 优化:支持 NUMA 的处理器会被划分为多个 Node,每个 Node 有本地的内存空间,这样 CPU 可以直接访问本地空间内存。

中断负载均衡:无论是软中断还是硬中断,它们的中断处理程序都可能会耗费大量的 CPU。开启 irqbalance 服务或者配置 smp_affinity,就可以把中断处理过程自动负载均衡到多个 CPU 上。
GDC主机交流论坛 https://www.globaldc.cn/
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|GDC主机交流论坛_GDC之家

GMT+8, 2024-4-20 01:53 , Processed in 0.056943 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表