Linux CPU 占用率 100% 排查

2024-03-30 05:12
文章标签 linux cpu 排查 100% 占用率

本文主要是介绍Linux CPU 占用率 100% 排查,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Linux CPU 占用率 100% 排查

总体来说分为五个步骤

  1. top 命令定位应用进程 pid
  2. top -Hp [pid] 定位应用进程对应的线程 tid
  3. printf “%x\n” [tid] 将 tid 转换为十六进制
  4. jstack [pid] | grep -A 10 [tid 的十六进制] 打印堆栈信息
  5. 根据堆栈信息分析问题

以下为实战例子

写一段死循环代码:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/*** CPU占用率测试方法*/
@RequestMapping("/api")
@RestController
public class CpuTestController {@GetMapping("/cpu/{count}")public long cpuRunning(@PathVariable("count") long count) {long result = 0;for (int i = 0; i < count; i++) {result++;}return result;}
}

调用接口

curl http://localhost:9999/api/cpu/10000000000,发现 CPU 一会儿就飙到了 100%,接下来我们按五步法探个究竟。

第一步:找到最耗 CPU 的进程 pid

// 执行 top 命令,按shift + p 组合键,按照CPU占用率排序
> top 

在这里插入图片描述
从图中,我们可以看到进程 pid 为 11168 的占用 CPU 是最高的,直接是 100%。

第二步:找到最耗 CPU 的线程 tid

// 执行 top -Hp [pid] 定位应用进程对应的线程 tid
// 按shift + p 组合键,按照CPU占用率排序
> top -Hp 11168

在这里插入图片描述
从图中,我们可以看到线程 tid 为 11196 占用 CPU 是最高的,达到 99.9%。

第三步:将线程 pid 转化为 16 进制

// printf "%x\n" [tid]  将tid转换为十六进制
> printf "%x\n" 11196
2bbc

在这里插入图片描述

第四步:查看线程的堆栈信息

// jstack [pid] | grep -A 10 [tid的十六进制]  打印堆栈信息
> jstack 11168 | grep -A 10 2bbc

在这里插入图片描述
我们不难发现原来是 CpuTestController 的第 24 行搞的鬼。

第五步:根据堆栈信息分析问题

找到对应的代码看一下,果真如此,问题已定位,优化代码逻辑吧~~~~

当然,除了使用上面的基础方法外,还有很多工具可以直接使用,例如阿里的

在这里插入图片描述
对于线上问题定位来说,分秒必争,所以我们在编码过程中,除了要实现业务功能交付,还要追求代码质量,要写出更高效、更优雅的代码。

这篇关于Linux CPU 占用率 100% 排查的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/860566

相关文章

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

Linux之systemV共享内存方式

《Linux之systemV共享内存方式》:本文主要介绍Linux之systemV共享内存方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、工作原理二、系统调用接口1、申请共享内存(一)key的获取(二)共享内存的申请2、将共享内存段连接到进程地址空间3、将

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

Linux命令之firewalld的用法

《Linux命令之firewalld的用法》:本文主要介绍Linux命令之firewalld的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux命令之firewalld1、程序包2、启动firewalld3、配置文件4、firewalld规则定义的九大

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文