【Linux服务器】CPU问题排查

news2024/12/26 11:06:19

概述

总体排查思路

  • 总体观察,htop命令观察系统负载程度 
  • 检查CPU占用高的进程
  • 检查CPU硬件信息是否为问题根源
  • 从宏观到细节分析系统IO情况
  • 最后检查系统日志

排查思路

系统负载

通过htop命令查看系统负载,通过系统负载可以判断系统是否繁忙,主要可以反应出系统的任务队列中等待CPU处理的进程数量

htop命令

过去 1 分钟、5 分钟和 15 分钟的平均系统负载

判断标准:负载值应该小于或者接近CPU核心数,例如我的Linux云服务器是2核,那么只要是小于2,CPU就远远没有超负荷

检查CPU占用

主要判断是否存在进程占用了大量的CPU资源

判断标准:一般80%为阈值,如果高于这个数值就要考虑到该进程是否有问题,检查该进程是否有无限循环、死锁问题

 检查CPU硬件信息

通过lscpu可以查看硬件信息

CPU基本信息

CPU缓存信息

如果缓存被频繁溢出(例如处理大量小请求时),可能会导致性能瓶颈。在调优时,可以考虑分析 CPU 缓存的使用情况

检查系统IO

常见问题

磁盘 I/O 延迟(await)

 如果平均等待时间很高,那么就表明磁盘存在瓶颈。可能是由于磁盘读写速度慢,或者磁盘负载过高。你可以检查磁盘是否满了,或者是否存在过多的磁盘请求导致磁盘响应变慢

一般优化方法更换SSD,或者通过RAID配置优化磁盘的读写速度

磁盘 I/O 阻塞进程(iotop)

某些进程占用了过多的磁盘 I/O,导致系统整体性能下降,可以考虑优化这些进程的 I/O 行为

可以通过减少频繁的磁盘访问,提高文件缓存命中率的方式来减少IO负担

磁盘空间和队列长度(iostat)

 如果队列长度过高,明磁盘是 I/O 瓶颈。可以进一步查看 bibo,确认是读还是写造成的瓶颈。如果是磁盘写操作频繁,可以考虑调整写缓存策略或优化文件系统

排查思路

dstat整体判断CPU是否存在瓶颈

  • 磁盘I/O(dsk/total):关注其读取和写入的数据,
  • 分页I/O:关注其加载和写入磁盘的数据
  • 系统I/O:关注其中断次数和上下文切还能次数,如果连个值都很高则表明系统正在大量的处理I/O操作或者任务切换

iostat进一步分析磁盘性能

  • 23.86% 的 CPU 时间用于执行用户空间的进程(%user
  • 0.00% 的 CPU 时间是用于优先级调整的进程(%nice
  • 8.63% 的 CPU 时间用于执行内核空间的进程(%system
  • 0.51% 的 CPU 时间是等待 I/O 完成(%iowait),即 CPU 空闲但等待磁盘等外部设备响应。
  • 0.00% 的 CPU 被虚拟化系统偷走(%steal),这通常出现在虚拟机中
  • 67.01% 的 CPU 是空闲的(%idle

重点关注指标

  • %util:表明磁盘使用的繁忙程度,如果接近于100%那么就证明磁盘基本没有什么空余空间
  • r/s:每秒读取请求的数量
  • w/s:每秒写入请求的数量
  • r_await:平均读取请求的等待时间
  • w_await:平均写入请求的等待时间
  • rareq-sz:每个读取请求的平均大小
  • wareq-ze:每个写入请求的平均大小
  • rrqm/s:每秒合并读取的请求书,合并请求可以减少磁盘访问次数,提高磁盘效率
  • aqu-sz:磁盘I/O队列的平均深度,如果队列很长那么就表明系统中有大量的I/O请求等待磁盘处理
  • drqm/s:每秒合并的删除请求数。如果你的系统涉及删除操作,查看这些指标可以帮助了解是否有删除请求的瓶颈

vmstat检查I/O等待时间是否过高,进一步确认是否有I/O阻塞问题

在CPU和IO排查中,使用iostat已经可以得到详细的数据,如果想要宏观的分析CPU情况再使用该工具

procs(进程)

  • r: 运行队列中等待执行的进程数,值高表示 CPU 繁忙
  • b: 不可中断状态的进程数,值高表示 I/O 阻塞

memory(内存)

  • swpd: 已使用的交换空间,值大表示内存紧张
  • free: 空闲内存,值低表示内存压力大
  • buff: 用作缓存的内存大小,反映内存管理情况
  • cache: 页面缓存的内存大小,说明内存管理较好

swap(交换空间)

  • si: 从交换空间读取的内存量,值高表示频繁使用交换空间
  • so: 写入交换空间的内存量,值高表示内存不足,频繁交换

io(I/O)

  • bi: 每秒从磁盘读取的字节数,值高表示大量磁盘读取操作
  • bo: 每秒写入磁盘的字节数,值高表示大量磁盘写入操作

system(系统)

  • in: 每秒硬件中断的次数,值高可能意味着系统负载高或硬件中断问题
  • cs: 每秒上下文切换的次数,值高可能说明系统负载高或频繁的进程切换

cpu(CPU 使用情况)

  • us: 用户空间占用 CPU 的百分比,值高表示应用程序消耗较多 CPU
  • sy: 内核空间占用 CPU 的百分比,值高表示内核操作占用大量 CPU
  • id: CPU 空闲时间的百分比,值高表示 CPU 处于空闲状态
  • wa: I/O 等待占用 CPU 的百分比,值高表示存在 I/O 阻塞
  • st: 虚拟化环境中的“偷取时间”,值高表示虚拟机间的资源竞争

系统日志检查

journalctl -xe

  • -x:显示详细的错误信息
  • -e:跳转到日志末尾,查看最新的日志

可以对硬件错误进行筛选

该出问题尚未遇到,后续遇到再详细补充 

journalctl -xe | grep -i "hardware error"

反思

目前学习阶段遇到的都是一些轻微的CPU错误,但是经过系统的了解CPU错误排查思路后,CPU问题往往不是单一因素导致的,在解决问题的时候一般是需要多维度考虑问题,从整体分析CPU问题的大概方向,然后使用工具进一步分析出CPU问题的根源

排查过程中,使用自动化工具对问题进行分析的工作不难,比较有挑战性的是从日志错误中分析出有效的信息,因为系统日志中各种信息类型很多。下一步需要学习对于日志筛查的学习,与此同时对于日志的分析页十分重要,借助日志可以提高自己排查错误效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2252245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解MyBatis之篇一

目录 MyBatis 定义 使用MyBatis操作数据库 创建项目 配置 演示 UserInfo.java UserInfoMapper UserInfoMapperTest 数据准备 自动生成测试类 运行结果 MyBatis 定义 MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避…

编译器优化技术

方法内联 逃逸分析 公共子表达式消除 数据边界检查消除

汽车IVI中控开发入门及进阶(三十五):架构QML App Architecture Best Practices

在Qt/QML工程的架构中,架构很重要,虽然本身它有分层,比如QML调用资源文件(图片等)显示GUI界面,后面的CPP文件实现界面逻辑,但是这个分类还有点粗。在实际开发中,界面逻辑也就是基于类cpp的实现,也开始使用各种面向对象的设计模式,实现更加优秀的开发架构,这点尤其在…

本地Docker部署个人在线音乐平台Melody结合内网穿透远程访问听音乐

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

异常--C++

文章目录 一、异常的概念及使用1、异常的概念2、异常的抛出和捕获3、栈展开4、查找匹配的处理代码5、异常重新抛出6、异常安全问题7、异常规范 二、标准库的异常 一、异常的概念及使用 1、异常的概念 异常处理机制允许程序中独立开发的部分能够在运行时就出现的问题进行通信并…

字符串p型编码

字符串p型编码 C 语言实现C 实现Java 实现Python 实现 💐The Begin💐点点关注,收藏不迷路💐 给定一个完全由数字字符(‘0’,‘1’,‘2’,…,‘9’)构成的字符串str,请写出str的p型编码串。例如&…

UIlicious - 自动化端到端测试

在现代软件开发中,测试自动化已然成为产品交付质量的基石。而端到端测试(E2E),作为验证整个应用流畅运行的关键,常常是测试工作中最具挑战性的一环。这时,一款简单高效的自动化测试工具——UIlicious&#…

机器学习:机器学习项目的完整周期

建立一个有价值的机器学习系统时,需要考虑和计划哪些步骤? 以语音识别为例演示机器学习项目的全周期:机器学习项目的第一步是对项目进行范围划分,即决定什么是项目和你想做什么,然后是收集数据,所以决定需…

浪潮X86服务器NF5280、8480、5468、5270使用inter VROC Raid key给NVME磁盘做阵列

Inter VROC技术简介 Intel Virtual RAID on CPU (Intel VROC) 简单来说就是用CPU的PCIE通道给NVME硬盘做Raid 更多信息可以访问官方支持页面 Raid Key 授权,即VROC SKU 授权主要有用的有2个标准和高级,仅Raid1的授权我暂时没见过。 标准 VROCSTANMOD …

ROS基本框架2——在ROS开发中创建并使用自定义消息(C++版本)

ROS基本框架2——在ROS开发中创建并使用自定义消息(C++版本) code review! 参考笔记 1.ROS基本框架1——编写简单的发布者和订阅者(C++和Python版本) 2.ROS基本框架2——在ROS开发中创建并使用自定义消息(C++版本) 文章目录 ROS基本框架2——在ROS开发中创建并使用自定义…

鸿蒙征文|鸿蒙技术分享:使用到的开发框架和技术概览

目录 每日一句正能量前言正文1. 开发环境搭建关键技术:2. 用户界面开发关键技术:3. 应用逻辑开发关键技术:4. 应用测试关键技术:5. 应用签名和打包关键技术:6. 上架流程关键技术:7. 后续维护和更新关键技术…

(长期更新)《零基础入门 ArcGIS(ArcMap) 》实验二----网络分析(超超超详细!!!)

相信实验一大家已经完成了,对Arcgis已进一步熟悉了,现在开启第二个实验 ArcMap实验--网络分析 目录 ArcMap实验--网络分析 1.1 网络分析介绍 1.2 实验内容及目的 1.2.1 实验内容 1.2.2 实验目的 2.2 实验方案 2.3 实验流程 2.3.1 实验准备 2.3.2 空间校正…

go语言 Pool实现资源池管理数据库连接资源或其他常用需要共享的资源

go Pool Pool用于展示如何使用有缓冲的通道实现资源池,来管理可以在任意数量的goroutine之间共享及独立使用的资源。这种模式在需要共享一组静态资源的情况(如共享数据库连接或者内存缓冲区)下非 常有用。如果goroutine需要从池里得到这些资…

马铃薯病害识别(VGG-16复现)

VGG16-Pytorch实现马铃薯病害识别 🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍖 原作者:K同学啊 电脑系统:Windows11 显卡型号:NVIDIA Quadro P620 语言环境:python 3.9.7 编译器&am…

HCSIF: 中国区域2000-2022年高时空分辨率(500m)SIF数据集

日光诱导叶绿素荧光(Solar-induced chlorophyll fluorescence, SIF)被誉为“植被光合作用的探针”。2017年,搭载在Sentinel-5P卫星上的 TROPOMI (TROPOspheric Monitoring Instrument)传感器成功发射,该卫星同时具有高…

STL:相同Size大小的vector和list哪个占用空间多?

在C中,vector和list是两种不同的序列容器。vector底层是连续的内存,而list是非连续的,分散存储的。因此,vector占用的空间更多,因为它需要为存储的元素分配连续的内存空间。 具体占用多少空间,取决于它们分…

蓝牙设备驱动开发

文章目录 一、蓝牙协议架构二、蓝牙协议的HCI传输层三、编程框架 一、蓝牙协议架构 蓝牙是无线数据和语音传输的开放式标准,它将各种通信设备、计算机及其终端设备、各种数字数据系统、甚至家用电器采用无线方式联接起来。它的传输距离为10cm~10m&#…

【计算机网络】实验7:默认路由和特定主机路由以及路由环路问题

实验 7:默认路由和特定主机路由以及路由环路问题 一、 实验目的 了解默认路由以及特定主机路由。 了解静态路由配置错误导致的路由环路问题。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、默认路由以及特定主机路由 (1) 第一步&#xff…

安装 RabbitMQ 服务

安装 RabbitMQ 服务 一. RabbitMQ 需要依赖 Erlang/OTP 环境 (1) 先去 RabbitMQ 官网,查看 RabbitMQ 需要的 Erlang 支持:https://www.rabbitmq.com/ 进入官网,在 Docs -> Install and Upgrade -> Erlang Version Requirements (2) …

MiniProfiler WebAPI 分析工具

一、介绍🛠️ MiniProfiler 是一款简单但有效的 .NET、Ruby、Go 和 Node.js 微型 性能分析器 。 MiniProfiler 不会将自身附加到每个方法调用;那会太具有侵入性,并且不会专注于最大的性能问题。相反,它提供: 🔸ADO.…