如何排查服务器 CPU 飙高

服务器 CPU 飙高(CPU 使用率持续超过 80% 甚至接近 100%)是典型的性能瓶颈问题,可能由应用逻辑缺陷、资源竞争、外部压力或硬件/系统异常引起。以下是系统化的排查步骤,覆盖从现象确认到根因定位的全流程。

一、确认 CPU 飙高的现象与范围

首先需明确 CPU 高负载的具体表现影响范围,避免误判:

1. 区分用户态(User)与内核态(System)CPU

通过 tophtop 查看 CPU 使用率细分:

  • 用户态(User)​​:应用程序代码执行占用的 CPU(如业务逻辑、计算)。
  • 内核态(System)​​:操作系统内核执行占用的 CPU(如 I/O 调度、网络协议栈、进程调度)。

关键结论​:

  • 若用户态 CPU 高:问题通常在应用程序(如死循环、频繁计算)。
  • 若内核态 CPU 高:问题可能在 I/O 阻塞、网络流量过大或系统调用频繁。
2. 确认是持续高负载还是间歇性高负载
  • 持续高负载​:可能是应用逻辑缺陷(如死循环)、内存泄漏导致频繁 GC,或外部持续压力(如 DDoS 攻击)。
  • 间歇性高负载​:可能是批量任务(如定时任务)、突发流量(如秒杀活动)或资源竞争(如锁争用)。
3. 定位高负载的进程/线程

使用工具锁定具体是哪个进程或线程占用了大量 CPU:

​(1) 系统级工具:top/htop
  • top 命令:按 P 键按 CPU 使用率排序,找到占用最高的进程(PID)。
    top -c  # 显示完整命令行
  • htop(更友好的交互式工具):支持树形查看进程关系,按 F6 选择排序方式(如 CPU 占用)。
​(2) 进程级工具:pidstat

通过 pidstat 查看进程的 CPU 使用细节(需安装 sysstat 包):

pidstat -u 1 5  # 每 1 秒输出一次,共 5 次,显示进程的 CPU 使用率
​(3) 线程级工具:top -H 或 jstack(Java 应用)​
  • 非 Java 应用​:通过 top -H -p <PID> 查看进程内的线程 CPU 占用(-H 显示线程)。
  • Java 应用​:使用 jstack <PID> 生成线程转储,结合 grep 过滤阻塞或运行中的线程:
    jstack <PID> | grep -A 20 "java.lang.Thread.State: RUNNABLE"  # 查看运行中的线程

二、分析高 CPU 进程的具体原因

锁定高 CPU 进程后,需深入分析其内部逻辑或外部交互,常见原因及排查方法如下:

1. 应用程序逻辑缺陷(用户态 CPU 高)​

典型场景​:死循环、递归未终止、频繁计算(如加密/压缩)、错误的分页查询(全表扫描)。

​(1) Java 应用:检查线程状态与调用栈
  • 死循环/无限递归​:线程转储中若大量线程处于 RUNNABLE 状态,且调用栈显示重复方法(如 while(true) 循环),可能是死循环。
    示例(死循环):

    "http-nio-8080-exec-1" #12 prio=5 os_prio=0 tid=0x00007f8e3c0b8000 nid=0x4567 runnable [0x00007f8e2c1fe000]java.lang.Thread.State: RUNNABLEat com.example.DeadlockDemo.infiniteLoop(DeadlockDemo.java:20)  # 重复调用自身...
  • 频繁 GC​:通过 jstat -gcutil <PID> 查看 GC 频率(FGC 频繁且 GCT 占比高),可能是内存泄漏或大对象分配导致。

​(2) 非 Java 应用:检查进程调用栈

使用 strace(Linux)跟踪进程的系统调用,定位耗时操作:

strace -p <PID> -c  # 统计系统调用耗时(-c 显示统计)

若发现大量 read()write()poll() 调用,可能是 I/O 阻塞或网络流量过大。

2. I/O 阻塞导致内核态 CPU 高

典型场景​:磁盘 I/O 慢(如机械盘 vs SSD)、网络 I/O 阻塞(如大量未完成的 Socket 连接)、文件描述符耗尽。

​(1) 磁盘 I/O 问题
  • 使用 iostat 查看磁盘 I/O 利用率(%util 接近 100% 表示磁盘满负荷):
    iostat -d 1 5  # 每 1 秒输出一次磁盘 I/O 统计
  • %util 高且 await(平均 I/O 等待时间)大,可能是磁盘性能不足或存在大量随机读写(如数据库日志写入)。
​(2) 网络 I/O 问题
  • 使用 netstatss 查看网络连接状态(如大量 TIME_WAITESTABLISHED 连接):
    ss -ant | grep ESTAB  # 查看已建立的 TCP 连接数
  • 若连接数过多(如超过 ulimit -n 限制),可能导致进程阻塞在 accept()connect(),间接推高内核态 CPU。
3. 锁竞争与线程争用

典型场景​:多个线程竞争同一把锁(如 synchronizedReentrantLock),导致线程频繁阻塞/唤醒。

​(1) Java 应用:检查锁竞争
  • 使用 jstack 查看线程的锁持有与等待关系(lockedwaiting to lock 字段):
    "Thread-1":waiting to lock <0x000000076b45a2c0> (a java.lang.Object)which is held by "Thread-0""Thread-0":locked <0x000000076b45a2c0> (a java.lang.Object)waiting to lock <0x000000076b45a290> (a java.lang.Object)
    此片段表明线程 Thread-0Thread-1 互相等待对方持有的锁,形成锁竞争。
​(2) 非 Java 应用:使用 perf 分析

Linux 下使用 perf 工具分析锁竞争(需 root 权限):

perf top -p <PID>  # 实时查看进程的热点函数(如锁获取/释放)
4. 外部压力:突发流量或恶意请求

典型场景​:DDoS 攻击、批量任务(如定时任务并发执行)、爬虫高频访问。

​(1) 检查网络流量
  • 使用 iftopnload 查看网络带宽占用(如某个 IP 发送大量请求):
    iftop -i eth0  # 实时显示网络接口流量
​(2) 检查应用日志
  • 查看 Web 服务器(如 Nginx、Tomcat)的访问日志,统计高频请求的 URL 或 IP:
    grep "GET /api" access.log | awk '{print $1}' | sort | uniq -c | sort -nr  # 统计 IP 访问次数
5. 硬件或系统异常

典型场景​:CPU 本身故障(如过热降频)、BIOS 配置错误、内核模块冲突。

​(1) 检查 CPU 温度与风扇
  • 使用 sensors 工具(需安装 lm-sensors 包)查看 CPU 温度:
    sensors  # 显示 CPU 核心温度(如 Core 0: +85°C)
    若温度过高(超过 90°C),可能是散热不良导致 CPU 降频(性能下降但功耗高)。
​(2) 检查内核日志

查看 /var/log/syslog/var/log/kern.log,寻找硬件错误或异常:

dmesg | grep -i "error\|warning"  # 显示内核错误/警告信息

三、总结:排查流程与工具链

步骤目标关键工具/命令
确认 CPU 飙高现象区分用户态/内核态,定位进程/线程tophtoppidstat
分析高负载进程锁定具体应用或服务jstack(Java)、strace(非 Java)
排查应用逻辑缺陷死循环、频繁计算、GC 问题线程转储、jstat -gcutil、代码审查
排查 I/O 阻塞磁盘/网络 I/O 慢、连接数过多iostatssnetstat
排查锁竞争与线程争用线程互相等待锁jstack(锁持有/等待关系)、perf(非 Java)
排查外部压力突发流量、恶意请求iftopnload、访问日志分析
检查硬件/系统异常CPU 故障、散热问题、内核错误sensorsdmesg、BIOS 配置检查

四、注意事项

  • 生产环境谨慎操作​:避免在业务高峰期重启进程或修改配置,优先通过监控工具(如 Prometheus+Grafana)实时观察。
  • 日志与监控结合​:通过日志(如应用日志、系统日志)和监控(CPU、内存、磁盘 I/O)交叉验证,避免误判。
  • 逐步缩小范围​:从系统→进程→线程→代码/配置,逐层定位根因,避免盲目修改。

通过以上步骤,可高效排查服务器 CPU 飙高的问题,最终定位到具体的应用逻辑缺陷、资源竞争或外部压力,并针对性优化。

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

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

相关文章

【DataWhale】快乐学习大模型 | 202507,Task05笔记

前言 今天是Transformer的编码实战阶段&#xff0c;照着示例代码执行一遍吧 embedding self.tok_embeddings nn.Embedding(args.vocab_size, args.dim)把token向量转为embedding矩阵&#xff08;一个token一个embedding向量&#xff09; 位置编码 为了解决“我喜欢你”和…

用ffmpeg 进行视频的拼接

author: hjjdebug date: 2025年 07月 22日 星期二 17:06:02 CST descrip: 用ffmpeg 进行视频的拼接 文章目录1. 指定协议为concat 方式.1.1 协议为concat 模式,会调用 concat_open 函数1.2 当读数据时,会调用concat_read2. 指定file_format 为 concat 方式2.1 调用concat_read_…

HTTP与HTTPS技术细节及TLS密钥交换与证书校验全流程

HTTP与HTTPS技术细节及TLS密钥交换与证书校验全流程 引言 文档目的与范围 核心技术栈概述 本文档的核心技术栈围绕传输层安全协议&#xff08;TLS&#xff09;展开。TLS协议作为安全套接字层&#xff08;SSL&#xff09;的后继标准&#xff0c;是现代网络安全通信的基础&am…

广播分发中心-广播注册流程

广播是怎么注册的呢&#xff1f;阶段组件/数据结构作用描述存储位置/关联关系App进程阶段BroadcastReceiver开发者自定义的广播接收器&#xff0c;实现onReceive方法处理事件。App进程&#xff08;Activity/Service等组件内&#xff09;ReceiverDispatcher将BroadcastReceiver封…

OpenCV计算机视觉实战(16)——图像分割技术

OpenCV计算机视觉实战&#xff08;16&#xff09;——图像分割技术0. 前言1. 分水岭算法1.1 应用场景1.2 实现过程2. GrabCut 交互式分割2.1 应用场景2.2 实现过程3. FloodFill3.1 应用场景3.2 实现过程小结系列链接0. 前言 图像分割是计算机视觉中将像素划分为具有特定语义或…

Coturn打洞服务器

* 概念理解&#xff1a;1. SDP协议&#xff1a;会话描述协议&#xff0c;视频通话的双方通过交换SDP信息进行媒体协商&#xff0c;从而选择使用某一相同的媒体协议进行通信&#xff1b;TLS协议&#xff1a;基于TCP的安全层传输协议DTLS协议&#xff1a;基于UDP的安全层传输协议…

python flusk 监控

# 创建虚拟环境目录 python3 -m venv /sda1/xunjian/venv # 激活虚拟环境 source /sda1/xunjian/venv/bin/activate # 激活后终端会显示 (venv)创建虚拟环境&#xff08;在当前目录&#xff09;&#xff1a;bashpython3 -m venv venv激活虚拟环境&#xff1a;bashsource venv/b…

VUE2 项目学习笔记 ? 语法 v-if/v-show

?语法页面渲染的时候&#xff0c;需要服务器传过来的对象中的一个属性&#xff0c;然后根据这个属性用v-for渲染标签&#xff0c;这里写的v-for".... in dataList.goodsList"但是当解析到这行语法的时候&#xff0c;dataList还没返回&#xff0c;因此控制台会报错找…

使用qemu命令启动虚拟机

1. 安装相关软件 yum install qemu edk2* libvirt -y 启动libvirt服务 systemctl start libvirtd systemctl status libvirtd2. 创建虚拟机 2.1. qemu启动命令示例 /usr/bin/qemu-system-loongarch64 \-machine virt,accelkvm \-nodefaults \-m 2048 \-smp 2,maxcpus4,co…

大模型系统化学习路线

人工智能大模型系统化学习路线一、基础理论筑基&#xff08;1-2个月) 目标&#xff1a;建立大模型核心认知框架 核心内容&#xff1a; 深度学习基础&#xff1a;神经网络原理、CNN/RNN结构、梯度下降算法大模型本质&#xff1a;Transformer架构&#xff08;重点掌握注意力机制、…

LLaMA-Factory 微调可配置的模型基本参数

LLaMA-Factory 微调可配置的模型基本参数 flyfish 基本参数 一、模型加载与路径配置参数名类型描述默认值model_name_or_pathOptional[str]模型路径&#xff08;本地路径或 Huggingface/ModelScope 路径&#xff09;。Noneadapter_name_or_pathOptional[str]适配器路径&#xf…

Ubuntu 22 安装 ZooKeeper 3.9.3 记录

Ubuntu 22 安装 ZooKeeper 3.9.3 记录 本文记录在 Ubuntu 22.04 系统上安装 ZooKeeper 3.9.3 的过程&#xff0c;包含 Java 环境准备、配置文件调整、启动与停机操作、以及如何将 ZooKeeper 注册为系统服务。 一、准备环境 ZooKeeper 3.9.x 要求 Java 11 或更高版本&#xff…

FreeSwitch通过Websocket(流式双向语音)对接AI实时语音大模型技术方案(mod_ppy_aduio_stream)

FreeSwitch通过WebSocket对接AI实时语音大模型插件技术方案1. 方案概述 基于FreeSWITCH的实时通信能力&#xff0c;通过WebSocket协议桥接AI大模型服务&#xff0c;实现低延迟、高并发的智能语音交互系统。支持双向语音流处理、实时ASR/TTS转换和动态业务指令执行。 1753095153…

航班调度优化策略全局概览

在机场关闭场景下的航班恢复工作&#xff0c;是将机场关闭期间所有的航班进行取消然后恢复还是将机场关闭期间航班全部延误而后调整呢&#xff1f;简单来说&#xff0c;在实际操作中&#xff0c;既不是无差别地全部取消&#xff0c;也不是无差别地全部延误。这两种“一刀切”的…

spring boot 异步线程@Async 传递 threadLocal数据

将父类的 threadLocal 的数据 在线程池时&#xff0c;可以转给子线程使用。 Async 的使用。 第一步在启动服务加上 EnableAsync 注解。 EnableAsync public class NetCoreApplication {... ... }第二步&#xff1a;导入阿里 线程工具类<dependency><groupId>com.a…

AI产品经理成长记《零号列车》第一集 邂逅0XAI列车

《零号列车》绝非传统意义上的 AI 产品经理教程 —— 它是我沉淀二十多年跨行业数字化转型与工业 4.0 实战经验后,首创的100集大型小说体培养指南。那些曾在千行百业验证过的知识与经验,不再是枯燥的文字堆砌,而是化作一场沉浸式的学习旅程。​ 这里没有生硬的理论灌输,而…

[C++11]范围for循环/using使用

范围for循环 范围for循环&#xff08;Range-based for loop&#xff09;是 C11 引入的一种简洁的循环语法&#xff0c;用于遍历容器中的元素或者其他支持迭代的数据结构。 范围for循环可以让代码更加简洁和易读&#xff0c;避免了传统for循环中索引的操作。 下面是范围for循环的…

简单了解下npm、yarn 和 pnpm 中 add 与 install(i) 命令的区别(附上两图带你一目明了)

目录 pnpm 中 add 和 i 的区别 npm 中 add 和 i 的区别 yarn 中 add 和 i 的区别 附上两图带你一目明了&#xff1a; npm、yarn和pnpm的三者区别图&#xff1a; i 和 add 的核心区别图&#xff1a; 个人建议&#xff1a;在项目中保持命令使用的一致性&#xff0c;选择一种…

ESP32-S3学习笔记<2>:GPIO的应用

ESP32-S3学习笔记&#xff1c;2&#xff1e;&#xff1a;GPIO的应用1. 头文件包含2. GPIO的配置2.1 pin_bit_mask2.2 mode2.3 pull_up_en和pull_down_en2.4 intr_type3. 设置GPIO输出/获取GPIO输入4. 中断的使用4.1 gpio_install_isr_service4.2 gpio_isr_handler_add4.3 gpio_…

得物视觉算法面试30问全景精解

得物视觉算法面试30问全景精解 ——潮流电商 商品鉴别 视觉智能&#xff1a;得物视觉算法面试核心考点全览 前言 得物App作为中国领先的潮流电商与鉴别平台&#xff0c;持续推动商品识别、真假鉴别、图像搜索、内容审核、智能推荐等视觉AI技术的创新与落地。得物视觉算法岗位…