`

通过top和jstack确定哪些线程耗尽了CPU?这些线程在做什么?

 
阅读更多

1. 背景

有时,线上集群load会突然飙升,无法响应正常请求。

那么引起load飙升的线程究竟在做什么?哪些线程霸占了CPU?可以通过top和jstack命令进行定位。

 

2. 定位步骤

1. 使用终端1进入目标机器,执行top命令,默认是进程视图,其中PID是进程号,截图如下:


 

在这里,我们只能看到java进程占用CPU达到115%,那么究竟是那些线程非常耗CPU呢?

2. 由于我们要看到线程,在终端1,按下“H”键或者“shift+h”,top视图会切换到线程视图,其中PID是线程号,截图如下:


 

可以发现红框内的线程的CPU使用率非常高,占用CPU时间达到1秒左右,显然不正常,但是这些线程在做什么?

3. 

  1. 打开终端2,使用jstack命令输出这一时刻的线程栈,保存到文件,命名为jstack.log。注意:输出线程栈和保存top命令快照尽量同时进行。
  2. 4. 由于jstack.log文件记录的线程ID是16进制,需要将top命令展示的线程号转换为16进制,以15100为例,在linux下输入命令:printf 0x%x 15100,得到15100的十六进制为0x3afc
  3. 5. 在jstack.log中搜索0x3afc关键字,可以清晰看到该线程在做刷新地址列表,如下图:
     

3. 总结

以前碰到集群load飙升时,有时会束手无策,不知从何查起。以后再发生类似问题时,可以使用这个方法,看下究竟是那些线程在长时间占用CPU,尽快定位问题和解决问题。

 

  • 大小: 141.3 KB
  • 大小: 117.5 KB
  • 大小: 167 KB
分享到:
评论

相关推荐

    通过 top 和 jstack 确定哪些线程耗尽了 CPU.docx

    ### 通过 top 和 jstack 确定哪些线程耗尽了 CPU #### 背景 在实际生产环境中,可能会遇到服务器负载突然上升、CPU使用率达到100%的情况,进而导致服务无法正常响应请求甚至出现宕机现象。这时,我们需要能够快速...

    jstack生成的Thread Dump日志.docx

    - 对于网络瓶颈,通过`netstat`监控网络流量,分析CPU使用情况,确认网络带宽是否限制了线程执行。 - 使用`jstack`配合`jconsole`、`VisualVM`等工具定期收集Thread Dump,分析趋势,找出异常行为。 - 优化同步...

    性能测试中的系统资源分析之 CPU

    在性能测试过程中,我们需要密切关注CPU的使用情况,以确保系统运行在最佳状态,防止资源耗尽导致服务中断。 当CPU出现异常,如使用率过高或不符合预期时,我们需要通过一系列步骤来定位问题。首先,可以使用`top`...

    java问题定位技术+性能优化

    - 结合线程堆栈分析,找出这些线程在做什么。 - **1.3.4 资源不足等导致的性能下降分析** - 监控系统的资源使用情况,如CPU、内存、磁盘I/O等。 - 分析线程堆栈,了解哪些线程正在执行可能导致资源不足的操作。 - **...

    问题分析:java.lang.OutOfMemoryError unable to create new native thre

    - 使用`free`、`top`等命令或工具(如JVisualVM)实时监控系统的内存和CPU使用情况,了解是否是整体资源紧张导致的问题。 6. **JVM内存映射**: - `jmap`工具可以帮助分析JVM内存分布,包括堆和非堆内存的使用...

    Java问题定位技术

    - 线程堆栈的阅读与解析:深入理解线程的当前状态和执行路径,通过阅读堆栈跟踪信息来理解线程在何处被阻塞,如何发生死锁等问题。 - 线程状态的分析:比如分析线程处于什么状态,比如运行态、等待态、睡眠态等。 ...

    Java并发程序设计教程

    线程是操作系统分配CPU时间的基本单元,Java通过Thread类来抽象线程。创建线程有两种方式:继承Thread类并重写run方法,或者实现Runnable接口并将其作为参数传递给Thread构造函数。另外,Java 5引入了Executor框架,...

    java问题定位技术

    本文将深入探讨如何有效地定位Java中的内存泄漏、线程死锁和CPU占用过高等常见问题。 首先,我们要理解内存泄漏的问题。内存泄漏是指程序在申请内存后,无法释放已申请的内存空间,一次小的内存泄漏可能看似无足...

    CoreJava:Java多线程

    在Java中,多线程可以通过两种主要方式实现:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新的类,该类直接或间接地继承自Thread类时,我们就可以覆盖它的run()方法,然后创建该类的实例并...

    JVM 18道面试题和答案.docx

    通过`jstack`工具可以查看线程的状态,了解栈帧的使用情况。JVM的基本配置参数如`-Xmx`、`-Xms`、`-Xss`和`-XX:MetaspaceSize`等可以控制内存的分配和行为,优化JVM性能。 例如,`-XX:SurvivorRatio`是年轻代中Eden...

    大话JAVA性能优化

    由于提供的信息不包含实际的书籍内容,因此无法生成有关书籍内容的知识点。但根据标题《大话JAVA性能...因此,开发者在应用这些知识点时,应结合最新的Java开发文档和社区讨论来制定适合当前技术环境的性能优化方案。

    JVM崩溃

    使用jstack命令分析线程状态,找出死锁的线程。 4. **类装载异常**:可能是由于类路径设置错误,或者类冲突导致。检查类路径设置,确保每个类只被加载一次。 5. **系统资源耗尽**:如打开的文件描述符数量过多,...

    Java JVM面试题.rar

    Java虚拟机(JVM)是Java程序运行的核心组件,它为Java应用程序提供了跨平台的运行环境。面试中,Java开发者经常会...在实际工作中,开发者还需要根据具体的应用场景和需求,灵活运用这些知识进行性能调优和问题排查。

    深入理解JAVA虚拟机实用技巧案例讲解.ppt

    **深入理解JAVA虚拟机实用技巧案例讲解** Java虚拟机(JVM)是Java程序的核心运行环境,它负责解析字节码并执行Java程序。...通过这些实践和案例学习,开发者能够更好地优化代码,提升系统的稳定性和性能。

    Java虚拟机内存管理与内存泄漏.pdf

    在分析内存泄漏问题时,还可以利用JVM提供的命令行工具,如jps来列出正在运行的Java进程,jinfo来查看和调整Java进程的配置参数,jstat来监视垃圾回收情况和堆内存使用情况,jstack用于生成当前时刻线程快照(Thread...

    Java性能调优命令

    在Java应用程序的性能调优过程中,掌握一系列命令行工具是至关重要的。这些工具可以帮助开发者监控应用程序的运行...通过这些工具提供的深入洞察,开发者可以更精确地调整和优化JVM参数,改善应用程序的性能和稳定性。

    VisualVM操作手册.doc

    通过其可视化界面,我们可以观察到应用的内存使用、线程状态、JVM参数、CPU使用率和垃圾回收详情。这对于JVM的性能优化非常有帮助。特别是在处理内存问题时,VisualVM能够有效地协助检测内存泄漏和解决内存溢出问题...

    JDK12-java-se-monitoring-and-management-guide.pdf

    6. **诊断工具**:JDK 12提供了一系列诊断工具,如`jinfo`、`jstack`和`jcmd`,用于获取进程信息、查看线程堆栈和执行JVM命令。这些工具在排查问题和优化性能时非常有用。 7. **日志和追踪**:理解如何配置和解析...

    系统稳定性——Dubbo 常见错误及解决方法1

    对于服务端响应慢,可以通过`jstack`分析线程状态找出性能瓶颈,必要时调整timeout阈值。如果发现GC日志中有长时间的GC暂停,应考虑是否存在GC抖动。网络问题也可能导致超时,可通过检查重传率和使用链路追踪工具...

Global site tag (gtag.js) - Google Analytics