掘金 后端 ( ) • 2024-05-07 10:41

theme: smartblue

#Linux/CPU #经验
本文是性能问题分析排查思路的展开内容之一,主要分为日志1期,机器4期、环境2期共7篇系列文章,本期是第五篇,讲机器(硬件)的CPU方面的分析排查方法与最佳实践。

大纲图聚焦

一般来说CPU是性能问题当中最不容易出问题的一个硬件,对于CPU相关的问题若不是硬件故障往往都是程序bug导致的,一个总体的排查大纲如下:

通用排查概述

CPU相关问题概述

在分布式系统中,CPU相关的性能问题通常涉及多个方面,包括CPU的利用率、超分问题、上下文切换等。例如,当多个虚拟机(VM)在同一台物理服务器上运行时,它们可能会争抢CPU资源,导致性能下降。此外,如果某个进程的CPU使用率异常升高,可能是由于该进程存在性能瓶颈或受到了恶意软件的攻击。

mpstat命令技巧

mpstat是一个用于显示CPU性能统计信息的Linux命令。它可以报告每个可用CPU的核心的性能数据,如用户空间、系统空间、空闲和等待I/O的时间百分比。

使用mpstat时,可以通过指定不同的选项和参数来定制输出,例如使用-P选项来显示特定处理器的统计数据,或使用-u选项来显示CPU利用率。

lscpu命令介绍

lscpu是一个用于显示CPU架构和相关信息的Linux命令。它提供了关于CPU的详细信息,包括处理器类型、架构、核心数、线程数、缓存大小等。使用lscpu可以帮助系统管理员了解CPU的硬件配置和性能特性。

NUMA简介

在上图中lscpu命令结果可以查看到cpu的NUMA分区情况,那NUMA是什么?

NUMA(Non-Uniform Memory Access)是一种用于多处理器的内存体系设计,它允许处理器访问自己的本地存储器比非本地存储器更快。在NUMA架构中,内存访问时间取决于处理器的内存位置。这种设计可以提高大型服务器的性能,特别是在需要高速访问大量内存的应用中。

在个别系统架构上,NUMA对业务性能影响较大,经验值一般为20%~50%的性能正面影响。

使用top观测CPU使用

top命令是Linux下常用的性能分析工具,它可以实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。

在top界面中,可以看到各个进程的CPU占用率和内存占用率等信息。通过按P键,可以将进程按照CPU占用率从大到小进行排序,从而快速找到占用CPU资源最多的进程。

观察多线程CPU负载

对于多线程应用,可以使用ps命令结合特定的选项和参数来观察每个线程的CPU使用情况。

例如,使用ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu可以显示所有线程的详细信息,并按照CPU占用率进行排序。此外,还可以进入特定进程的目录(如/proc/pid/task),通过查看每个线程的状态信息来确定CPU占用较高的线程。

uptime命令

uptime命令用于显示系统已经运行了多长时间,以及当前登录的用户数量和系统在过去1分钟、5分钟、15分钟内的平均负载。

uptime
08:22:54 up 18:34,  1 user,  load average: 0.05, 0.04, 0.00

平均负载是指系统在特定时间间隔内运行队列中的平均进程数,包括正在运行和等待运行的进程。通过uptime命令,可以快速了解系统的负载情况,以及是否有过多的进程在等待CPU资源。

机器Load的本质

机器的Load(负载)是指系统在特定时间间隔内处理的任务数量。 Load的高低反映了系统的繁忙程度。在Linux系统中,Load通常由两个部分组成:用户空间的任务和内核空间的任务。 当Load过高时,意味着系统有大量的任务在等待处理,这可能导致响应时间延长和系统性能下降。

常见的CPU异常及检测

常见的CPU异常包括CPU使用率异常升高、CPU温度过高等。这些异常可能是由于恶意软件(如挖矿病毒)的攻击、系统配置不当或硬件故障等原因引起的。

为了检测这些异常,可以使用上述提到的工具(如top、mpstat等)来监控CPU的使用情况和性能数据。如果发现异常,可以采取相应的措施进行处理,如隔离受影响的进程、修复程序异常(死循环?不当并发?)或检查硬件设备是否损坏等。