告别重启大法,CPU飙高问题如何排查详细教程以及解决方案

文章目录

0 前言

  本篇是本人认为最实用的一篇,在日常开发运维工作中,经常遇到CPU较高的情况,一开始时还不知道怎么定位是哪个方法导致了CPU过高,一头雾水,无法定位问题,本文详细介绍如何定位CPU过高的问题修改。

1.确定问题进程

首先,使用top命令找出占用CPU较高的java进程:

bash 复制代码
  top

  找到对应的进程ID号

2.获取线程信息

  使用top -Hp 命令查看该进程内各个线程的CPU占用情况。

bash 复制代码
top -Hp <PID>

  记录下占用CPU较高的线程ID

3.转换线程ID为十六进制

  使用printf命令将线程ID 19664 转换为十六进制,结果4X4cd0。

bash 复制代码
 printf "%x\n" <线程ID>

4.获取线程堆栈

  使用jstack命令获取进程的线程堆栈信息:

5.分析代码

  根据堆的信息,查看相关的java代码。以上是一些可能导致CPU飙升的代码示例:

  实战案例:

  死循环1:

频繁垃圾回收2:

不当的线程同步3:

密集的计算机计算指标4:

6.性能分析工具

  可以使用诸如Arthas、JProfile等Java性能分析工具进行更深入的分析。

7. 查看GC日志

  如果怀疑GC问题,可以查GC日志。

bash 复制代码
	jstat -gcutil <PID> 1000

8.检查系统资源

  使用vmstat、iostat等命令检查系统资源使用情况,排除是否为系统资源问题通过以上步骤,我们可以定位到导致CPU飙高的具体代码位置,然后进行相应的优化。常见的优化方法包括:优化算法、增加缓存、调整线程池参数、优化数据库查询等。在进行优化时,要注意进行充分的测试,以确保修改不会引入新的问题。

总结

  本章的标题是告别重启大法,就是我们以后遇到问题后,已经知道怎么取定位以及解决问题了,不再是稀里糊涂的把系统重启后,反复出现问题。

相关推荐
打工仔折腾 AI5 分钟前
System Prompt 替代 Few-shot:用规则约束大模型输出的省钱实践
java·人工智能·python·spring·langchain·prompt·ai agent 实战
CarIise12 分钟前
Java实训阶段查漏补缺复习笔记1
java·开发语言·笔记
vx-程序开发1 小时前
【计算机毕设】51300童装超市管理系统的设计与实现
java·vue.js·spring boot·源码·课程设计·毕设·大作业
ym hyd 1112 小时前
题库建立与考试系统源码 Java+SpringBoot+Vue3 前后分离
java·开发语言·vue.js·spring boot·毕设
risc1234562 小时前
什么是码点?
java
JavaPub-rodert2 小时前
公共 Docker 镜像源总失效?用 Harbor Proxy Cache 自建 Docker Hub 镜像缓存
java·缓存·docker
智鸟科技GemeOpen开发者智能设备2 小时前
平安校园 AI 智能实时告警系统 智鸟科技·GemeOpen + 谷华科技·融合创新方案白皮书
java·开发语言·python·物联网·智能家居
自强的小白2 小时前
nacos配置中心面试题(导入配置的优先级),注意是如果后导入相同配置是以 后导入优先。外部入优先和nacos的数据隔离。
java·微服务
Wang's Blog2 小时前
Java框架 SpringCloud 快速入门: Feign 的自定义配置与日志级别
java·开发语言·spring cloud
成旭先生3 小时前
企业全景信息查询 API:工商照面 33 项、股东出资、变更与社保一次查全
java·开发语言·api接口·企业信息查询·工商数据·风控尽调·供应商准入