【Java】服务CPU占用率100%,教你用jstack排查定位

简介: 本文详细讲解如何使用jstack排查定位CPU高占用问题。首先介绍jstack的基本概念:它是诊断Java应用程序线程问题的工具,能生成线程堆栈快照,帮助找出程序中的瓶颈。接着,文章通过具体步骤演示如何使用`top`命令找到高CPU占用的Java进程及线程,再结合`jstack`命令获取堆栈信息并进行分析,最终定位问题代码。

前言

🍊缘由

我对你的爱都没100%,你的服务却把我CPU沾满

🏀事情起因:

大家好,我是JavaDog程序狗

今天给大家来分享一下如何使用jstack排查定位CPU高占用问题

你想听的故事

🎯主要目标

实现2大重点

1. 什么是jstack
2. jstack排查定位方法步骤

🥦目标分析

一. 什么是jstack?

jstack 是一个用于诊断 Java 应用程序线程问题的工具,它主要用来生成 Java 虚拟机(JVM)在某一时刻的线程堆栈快照。
这个快照包含了JVM 内所有线程的信息,包括它们正在执行的方法调用堆栈以及可能的阻塞点

👽人话解释

jstack 就像是给你的Java 程序做的一次“体检”,特别是检查程序里的“线程”是否健康。

想象一下,你的程序就像是一个繁忙的工厂,有很多工人(线程)在同时工作,有的在搬运货物(执行任务),有的在等待机器(等待资源),还有的可能因为某些原因卡住了(死锁或挂起)。

当你发现程序运行变慢或者卡住时,jstack 就能派上用场了。它会告诉你每个工人(线程)当前在做什么,他们在哪里停下了手头的工作,或者是否在等待其他工人的帮助。这样,你就可以找出是谁在捣乱,为什么程序会变慢,然后采取措施解决问题。


二. jstack排查定位方法步骤?

1. 使用top命令

top

服务器使用top命令,查看占用cpu过高的java进程pid

如果java进程少,还可以通过jps -l 拿到java进程pid

jps -l

2. top -Hp pid

top -Hp 31411

使用top -Hp 31411,31411就是上方占用最高的java进程pid。
可以查看该进程下,各个线程的cpu使用情况,找到对应的最高占用率的pid,也就是31413

3. printf '%x\n' pid

printf '%x\n' 3141

使用printf '%x\n' 31413将线程号转化为16进制显示

4.jstack pid | grep '转化后16进制线程id' -C5 --color

jstack 31411 | grep '7ab5' -C5 --color

通过jstack打印进程31413的堆栈信息,并只过滤出线程7ab5的堆栈信息

最后查看报错提示行数,找到源码,成功定位

总结

高效利用jstack诊断Java应用性能问题

  1. 定位问题:

    • 用top或jps -l找到高CPU的Java进程。
    • top -Hp 找出最耗CPU的线程。
    • 将线程ID转为十六进制。
  2. 获取堆栈:

    • jstack | grep '' -C5获取线程堆栈信息。
  3. 分析修复:

    • 分析堆栈信息,定位并修复问题代码。

jstack是快速诊断Java应用性能瓶颈的关键工具,掌握其使用可有效提升应用稳定性


🍯猜你喜欢

文章推荐

【规范】Git分支管理,看看我司是咋整的

【工具】珍藏免费宝藏工具,不好用你来捶我

【插件】IDEA这款插件,爱到无法自拔

【规范】看看人家Git提交描述,那叫一个规矩

【工具】用nvm管理nodejs版本切换,真香!

【项目实战】SpringBoot+uniapp+uview2打造H5+小程序+APP入门学习的聊天小项目

【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序

【模块分层】还不会SpringBoot项目模块分层?来这手把手教你!

目录
相关文章
|
6月前
|
监控 Java Unix
6个Java 工具,轻松分析定位 JVM 问题 !
本文介绍了如何使用 JDK 自带工具查看和分析 JVM 的运行情况。通过编写一段测试代码(启动 10 个死循环线程,分配大量内存),结合常用工具如 `jps`、`jinfo`、`jstat`、`jstack`、`jvisualvm` 和 `jcmd` 等,详细展示了 JVM 参数配置、内存使用、线程状态及 GC 情况的监控方法。同时指出了一些常见问题,例如参数设置错误导致的内存异常,并通过实例说明了如何排查和解决。最后附上了官方文档链接,方便进一步学习。
655 4
|
3月前
|
Arthas 监控 Java
Java死锁 如何定位?如何避免Java死锁?(图解+秒懂+史上最全)
Java死锁 如何定位?如何避免Java死锁?(图解+秒懂+史上最全)
Java死锁 如何定位?如何避免Java死锁?(图解+秒懂+史上最全)
|
3月前
|
分布式计算 搜索推荐 算法
Java 大视界 -- Java 大数据在智慧养老服务需求分析与个性化服务匹配中的应用(186)
本篇文章探讨了Java大数据技术在智慧养老服务需求分析与个性化服务匹配中的应用。通过整合老年人健康数据与行为数据,结合机器学习与推荐算法,实现对老年人健康风险的预测及个性化服务推荐,提升养老服务的智能化与精准化水平,助力智慧养老高质量发展。
|
5月前
|
搜索推荐 Java 定位技术
Java实现利用GeoLite2-City.mmdb根据IP定位城市的方法
在城市,国家,地区等地理位置数据获取之后,你可以依指定的业务需求,来进行进一步的数据处理。例如,你可以设计一个应用,根据用户的 IP 地址来个性化地展示内容,或者用于分析网络请求的来源等。
850 20
|
8月前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
406 7
|
11月前
|
监控 算法 Java
jvm-48-java 变更导致压测应用性能下降,如何分析定位原因?
【11月更文挑战第17天】当JVM相关变更导致压测应用性能下降时,可通过检查变更内容(如JVM参数、Java版本、代码变更)、收集性能监控数据(使用JVM监控工具、应用性能监控工具、系统资源监控)、分析垃圾回收情况(GC日志分析、内存泄漏检查)、分析线程和锁(线程状态分析、锁竞争分析)及分析代码执行路径(使用代码性能分析工具、代码审查)等步骤来定位和解决问题。
212 6
|
12月前
|
Java 数据库
基于java的汽车服务管理系统(Car Service Management System)
基于java的汽车服务管理系统(Car Service Management System)
87 0
|
25天前
|
缓存 人工智能 算法
不同业务怎么选服务器?CPU / 内存 / 带宽配置表
本文详解了服务器三大核心配置——CPU、内存、带宽,帮助读者快速理解服务器性能原理。结合不同业务场景,如个人博客、电商、数据库、直播等,提供配置选择建议,并强调合理搭配的重要性,避免资源浪费或瓶颈限制。内容实用,适合初学者和业务选型参考。
252 0
|
1月前
|
存储 消息中间件 缓存
从纳秒到毫秒的“时空之旅”:CPU是如何看待内存与硬盘的?
在数据爆炸的时代,如何高效存储与管理海量数据成为系统设计的核心挑战。本文从计算机存储体系结构出发,解析B+树、LSM树与Kafka日志结构在不同数据库中的应用与优化策略,帮助你深入理解高性能存储背后的原理。
62 0

热门文章

最新文章