Linux平台排查CPU占用高的进程和线程指南

news2025/6/6 0:30:54

基础排查工具

1. top命令 - 实时进程监控

top
  • 操作指令
    • P:按CPU使用率排序
    • 1:显示每个CPU核心的使用情况
    • H:切换显示线程视图
    • M:按内存使用排序
    • q:退出

2. htop命令 - 增强版top(需安装)

sudo apt install htop  # Debian/Ubuntu
sudo yum install htop  # CentOS/RHEL
htop
  • 彩色界面,支持鼠标操作
  • 树状显示进程关系
  • 可直接杀死进程(F9)

3. ps命令 - 进程快照

# 查看CPU占用前10的进程
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 10

# 查看特定进程的所有线程
ps -T -p <PID>

# 显示线程的CPU占用
ps -eLf --sort=-%cpu | head

高级排查工具

4. pidstat - 进程统计(sysstat包)

sudo apt install sysstat  # 安装
pidstat -u 1 5           # 每1秒采样一次,共5次
pidstat -t -p <PID> 1 3  # 监控特定进程的线程

5. mpstat - 多核CPU统计

mpstat -P ALL 1  # 查看每个CPU核心的使用情况

6. perf - 性能分析

# 实时监控
sudo perf top

# 记录特定进程
sudo perf record -g -p <PID>
sudo perf report

线程级排查

7. 使用top查看线程

top -H -p <PID>  # 查看特定进程的线程

8. 使用strace跟踪系统调用

strace -p <TID> -c  # 统计线程的系统调用
strace -p <TID>     # 实时跟踪

9. 查看进程的调用栈

# 安装gdb
sudo apt install gdb

# 生成线程堆栈
gdb -p <PID>
(gdb) thread apply all bt  # 打印所有线程堆栈
(gdb) detach
(gdb) quit

自动化排查脚本

10. 快速定位高CPU进程

#!/bin/bash
echo "===== 高CPU进程 TOP5 ====="
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 6

read -p "输入要分析的PID(直接回车跳过): " pid
if [ ! -z "$pid" ]; then
    echo -e "\n===== 进程 $pid 的线程 ====="
    ps -T -p $pid --sort=-%cpu
    
    echo -e "\n===== 线程调用栈采样 ====="
    sudo gdb -p $pid -batch -ex "thread apply all bt" 2>&1 | grep -v "^New" | head -n 50
    
    echo -e "\n===== 系统调用统计 ====="
    sudo strace -p $pid -c 2>&1 | tail -n +2
fi

系统级检查

11. 检查系统负载

uptime        # 查看1/5/15分钟平均负载
vmstat 1 5    # 查看系统整体状态
dmesg         # 检查内核日志

12. 检查中断和软中断

cat /proc/interrupts
cat /proc/softirqs

排查流程总结

  1. 定位高CPU进程:使用top/htop/ps找出问题进程
  2. 分析进程线程:top -H/ps -T查看线程情况
  3. 检查调用栈:使用gdb/perf分析执行路径
  4. 监控系统调用:strace跟踪具体行为
  5. 检查依赖资源:查看是否因等待IO/锁等导致
  6. 分析日志:检查系统日志和应用日志

优化建议

  1. 算法优化:改进高时间复杂度算法
  2. 并发控制:调整线程池大小,避免过多线程竞争
  3. 缓存机制:减少重复计算
  4. 异步处理:将阻塞操作改为异步
  5. 分批处理:大数据集分片处理
  6. 升级版本:使用修复了性能问题的新版本

通过以上方法,您可以系统性地排查和解决Linux系统中的高CPU占用问题。对于生产环境,建议建立长期监控机制,以便及时发现性能问题。

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

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

相关文章

多模态大语言模型arxiv论文略读(105)

UnifiedMLLM: Enabling Unified Representation for Multi-modal Multi-tasks With Large Language Model ➡️ 论文标题&#xff1a;UnifiedMLLM: Enabling Unified Representation for Multi-modal Multi-tasks With Large Language Model ➡️ 论文作者&#xff1a;Zhaowei…

Pyhton中的命名空间包(Namespace Package)您了解吗?

在 Python 中&#xff0c;命名空间包&#xff08;Namespace Package&#xff09; 是一种特殊的包结构&#xff0c;它允许将模块分散在多个独立的目录中&#xff0c;但这些目录在逻辑上属于同一个包命名空间。命名空间包的核心特点是&#xff1a;没有 __init__.py 文件&#xff…

Azure DevOps Server 2022.2 补丁(Patch 5)

微软Azure DevOps Server的产品组在4月8日发布了2022.2 的第5个补丁。下载路径为&#xff1a;https://aka.ms/devops2022.2patch5 这个补丁的主要功能是修改了代理(Agent)二进制安装文件的下载路径&#xff1b;之前&#xff0c;微软使用这个CND(域名为vstsagentpackage.azuree…

手摸手还原vue3中reactive的get陷阱以及receiver的作用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、实例是什么&#xff1f;二、new Prxoy三、实现代码1.引入代码2.读入数据 总结 前言 receiver不是为解决get陷阱而生&#xff0c;而是为解决Proxy中的this绑…

C++学习-入门到精通【13】标准库的容器和迭代器

C学习-入门到精通【13】标准库的容器和迭代器 目录 C学习-入门到精通【13】标准库的容器和迭代器一、标准模板库简介1.容器简介2.STL容器总览3.近容器4.STL容器的通用函数5.首类容器的通用typedef6.对容器元素的要求 二、迭代器简介1.使用istream_iterator输入&#xff0c;使用…

C# 面向对象特性

面向对象编程的三大基本特性是&#xff1a;封装、继承和多态。下面将详细介绍这三大特性在C#中的体现方式。 封装 定义&#xff1a;把对象的数据和操作代码组合在同一个结构中&#xff0c;这就是对象的封装性。 体现方式&#xff1a; 使用访问修饰符控制成员的可见性 通过属…

ElasticStack技术之logstash介绍

一、什么是Logstash Logstash 是 Elastic Stack&#xff08;ELK Stack&#xff09;中的一个开源数据处理管道工具&#xff0c;主要用于收集、解析、过滤和传输数据。它支持多种输入源&#xff0c;如文件、网络、数据库等&#xff0c;能够灵活地对数据进行处理&#xff0c;比如…

CI/CD 持续集成、持续交付、持续部署

CI/CD 是 持续集成&#xff08;Continuous Integration&#xff09; 和 持续交付/持续部署&#xff08;Continuous Delivery/Deployment&#xff09; 的缩写&#xff0c;代表现代软件开发中通过自动化流程快速、可靠地构建、测试和发布代码的实践。其核心目标是 减少人工干预、…

关于easyx头文件

一、窗口创建 &#xff08;1&#xff09;几种创建方式 #include<easyx.h>//easyx的头文件 #include<iostream> using namespace std;int main() {//创建一个500*500的窗口//参数为&#xff1a;长度&#xff0c;宽度&#xff0c;是否显示黑框&#xff08;无参为不…

django入门-orm数据库操作

一&#xff1a;下载数据库依赖项mysqlclient pip install mysqlclient 二&#xff1a;django配置文件配置数据库链接 路径&#xff1a;mysite2\mysite2\settings.py DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: data, # 数据库名称USER: root, …

STM32外部中断(EXTI)以及旋转编码器的简介

一、外部中断机制概述 中断是指当主程序执行期间出现特定触发条件&#xff08;即中断源&#xff09;时&#xff0c;CPU将暂停当前任务&#xff0c;转而执行相应的中断服务程序&#xff08;ISR&#xff09;&#xff0c;待处理完成后恢复原程序的运行流程。该机制通过事件驱动…

双擎驱动:华为云数字人与DeepSeek大模型的智能交互升级方案

一、技术融合概述 华为云数字人 华为云数字人&#xff0c;全称&#xff1a;数字内容生产线 MetaStudio。数字内容生产线&#xff0c;提供数字人视频制作、视频直播、智能交互、企业代言等多种服务能力&#xff0c;使能千行百业降本增效。另外&#xff0c;数字内容生产线&#…

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.5 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第5章析因设计引导5.7节思考题5.5 R语言解题。主要涉及方差分析&#xff0c;正态假设检验&#xff0c;残差分析&#xff0c;交互作用图。 dataframe <-data.frame( wrapc(17,20,12,9,…

字节新出的MCP应用DeepSearch,有点意思。

大家好&#xff0c;我是苍何。 悄悄告诉你个事&#xff0c;昨天我去杭州参加字节火山方舟举办的开发者见面会了&#xff0c;你别说&#xff0c;还真有点刘姥姥进大观园的感觉&#x1f436; 现场真实体验完这次新发布的产品和模型&#xff0c;激动的忍不住想给大家做一波分享。…

期货反向跟单运营逻辑推导思路

期货反向跟单运营逻辑推导思路 很多刚接触期货反向跟的朋友第一印象就是&#xff1a;这绝对是一个完美的策略&#xff0c;在认知不到位的情况下就开始运营&#xff0c;结果就是赔的稀里哗啦。然后告诉身边所有的人&#xff0c;期货反向跟单不靠谱。 这就是一个很有意思的事情&…

使用 HTML + JavaScript 实现图片裁剪上传功能

本文将详细介绍一个基于 HTML 和 JavaScript 实现的图片裁剪上传功能。该功能支持文件选择、拖放上传、图片预览、区域选择、裁剪操作以及图片下载等功能&#xff0c;适用于需要进行图片处理的 Web 应用场景。 效果演示 项目概述 本项目主要包含以下核心功能&#xff1a; 文…

【灵动Mini-F5265-OB】vscode+gcc工程创建、下载、调试

【前言】 【灵动Mini-F5265-OB】在官方的例程中提供了mdk、IAR的开发环境&#xff0c;使用起来非常方便。有位大佬也提供了一个gcc的示例&#xff0c;但是我使用vscode的keil插件进行工程创建&#xff0c;但是提示pack是对不上的。所以我决定重新创建我的vscode来创建开发环境。…

现代语言模型中的分词算法全解:从基础到高级

基础分词&#xff08;Naive Tokenization&#xff09; 最简单的分词方式是基于空格将文本拆分为单词。这是许多自然语言处理&#xff08;NLP&#xff09;任务中常用的一种分词方法。 text "Hello, world! This is a test." tokens text.split() print(f"Tok…

第十三章 Java基础-特殊处理

文章目录 1.包和final2.权限修饰符和代码块3.抽象类1.包和final 2.权限修饰符和代码块 3.抽象类

【操作系统原理08】文件管理

文章目录 零.大纲一.文件管理0.大纲1.文件管理1.1 **文件属性**1.2 文件内部数据组织1.3 文件之间的组织1.4操作系统提供功能1.5 文件在外存存放 二.文件的逻辑结构0.大纲1.无结构文件2.有结构文件 三.文件目录0.大纲1.文件控制块2.目录结构3.索引节点(FCB改进) 四.文件共享0.大…