`
yes1983
  • 浏览: 38501 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux下使用jstack来找出死循环的java代码

阅读更多

我们使用jdk自带的jstack来分析。当linux出现cpu被java程序消耗过高时,以下过程说不定可以帮上你的忙: 

1.top查找出哪个进程消耗的cpu高 
21125 co_ad2    18   0 1817m 776m 9712 S  3.3  4.9  12:03.24 java                                                                                           
5284 co_ad     21   0 3028m 2.5g 9432 S  1.0 16.3   6629:44 java                                                                                           
21994 mysql     15   0  449m  88m 5072 S  1.0  0.6  67582:38 mysqld                                                                                        
8657 co_sparr  19   0 2678m 892m 9220 S  0.3  5.7 103:06.13 java 

这里我们分析21125这个java进程。 

2.top中shift+h查找出哪个线程消耗的cpu高 
先输入top,然后再按shift+h 
21233 co_ad2    15   0 1807m 630m 9492 S  1.3  4.0   0:05.12 java                                                                                           
20503 co_ad2_s  15   0 1360m 560m 9176 S  0.3  3.6   0:46.72 java                                                                                           
21134 co_ad2    15   0 1807m 630m 9492 S  0.3  4.0   0:00.72 java                                                                                           
22673 co_ad2    15   0 1807m 630m 9492 S  0.3  4.0   0:03.12 java 

这里我们分析21233这个线程,并且注意的是,这个线程是属于21125这个进程的。 

3.jstack查找这个线程的信息 
jstack [进程]|grep -A 10 [线程的16进制] 
即: 

Java代码  收藏代码
  1. jstack 21125|grep -A 10 52f1  


-A 10表示查找到所在行的后10行。21233用计算器转换为16进制52f1,注意字母是小写。 
结果: 

Java代码  收藏代码
  1. "http-8081-11" daemon prio=10 tid=0x00002aab049a1800 nid=0x52bb in Object.wait() [0x0000000042c75000]  
  2.    java.lang.Thread.State: WAITING (on object monitor)  
  3.      at java.lang.Object.wait(Native Method)  
  4.      at java.lang.Object.wait(Object.java:485)  
  5.      at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:416)  


说不定可以一下子定位到出问题的代码。

分享到:
评论

相关推荐

    Java线程Dump分析工具jstack解析及使用场景

    本文将深入解析jstack的使用方法及其在不同场景下的应用。 jstack命令的基本格式如下: ``` jstack [-l] [-F] pid ``` 其中,`pid` 是Java进程的ID,`-l` 选项会提供更详细的线程和锁信息,而 `-F` 选项则用于在...

    Kubernetes应用java程序无法使用jmap,jstack的解决方案.docx

    这种情况下,无法获取 Java 进程的 pid,导致无法使用 jmap 和 jstack 命令。 解决方案: 1. 了解 Linux 特殊进程 在 Linux 系统中,有一些特殊的进程,例如 pid=1 的 init 进程、pid=2 的 kthreadd 进程等。这些...

    JStack和Java Thread Dumps分析

    本文将详细介绍`JStack`的使用方法及其在分析Java线程堆栈中的应用。 #### 二、JStack简介 `JStack`是Java Development Kit (JDK)的一部分,用于生成正在运行的Java应用程序的线程快照。这些快照提供了关于每个...

    linux服务器找到占用cpu高的java代码的办法

    通过以上步骤,我们可以有效地找出并解决Linux服务器上Java应用占用CPU过高的问题。记得在处理过程中保持耐心和细致,因为性能问题往往需要深入分析才能找到根本原因。同时,定期的性能测试和代码审查也是预防此类...

    输出java进程的jstack信息示例分享 通过线程堆栈信息分析java线程

    为了获取这些信息,我们可以使用jstack工具,它是Java开发工具包(JDK)的一部分,能够输出Java进程的线程堆栈跟踪信息。 jstack命令通常可以输出以下类型的信息: 1. 线程的完整堆栈跟踪,包括本地方法。 2. 显示...

    抓取jstack方法及解决system用户执行jstack命令权限问题

    抓取jstack方法及解决system用户执行jstack命令权限问题, 打开cmd窗口,输入命令 jstack -l 49824>>C:/error01.txt 其中49824为tomcat8.0 的pid ; error01.txt 这个可以自己取名字 多输出几份jstack 文件,做比对...

    使用jstack定位分析CPU消耗问题.docx

    使用 jstack 定位分析 CPU 消耗问题 在实际生产环境中,CPU 占用率过高的问题经常会出现,特别是在高并发情况下。使用 jstack 工具可以帮助我们快速定位 CPU 消耗问题的根源。本文将详细介绍使用 jstack 工具定位...

    Linux下启动JAVA

    在Linux环境下启动Java应用程序是许多开发人员和系统管理员日常任务的一部分。Java的可移植性使得它能在各种操作系统上运行,而Linux作为服务器...理解并掌握这些内容对于任何Linux下的Java开发者来说都是至关重要的。

    图形界面分析threadump_jstack分析工具_包含jdk

    标题中的“图形界面分析threadump_jstack分析工具_包含jdk”指的是一个专用于分析Java应用程序线程堆栈信息的工具,该工具具有图形用户界面,能够帮助开发者更直观地理解和解决程序中的线程问题。这个工具包含了JDK...

    linux下查看java进程下线程占用cpu情况

    - `perf` 是Linux下的一个性能分析工具,可以用来分析特定进程或线程的CPU使用情况,包括Java进程。使用 `perf stat -p <进程ID>` 可以查看指定进程的CPU使用统计。 7. **`strace` 命令**: - `strace` 可以跟踪...

    MPP的jstack分析结果

    2. **堆栈轨迹**:每个线程的状态下都会附带其调用堆栈,展示出线程执行的具体代码路径。这能帮助我们定位问题代码,比如查找死锁的源头或者耗时操作。 3. **锁信息**:如果线程处于阻塞状态,jstack会显示持有或...

    JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解.docx

    例如,使用 ps、top、printf、jstack、grep 等命令来找出某个 Java 进程中最耗费 CPU 的 Java 线程并定位堆栈信息。 例如:root@ubuntu:/ ps -ef | grep mrf-center | grep -v grep root 21711 1 1 14:47 pts/3 00:...

    通过jstack分析解决进程死锁问题实例代码

    在介绍如何使用jstack分析并解决Java进程中的死锁问题之前,我们首先需要了解什么是死锁以及它为何会在多线程程序中发生。在多线程环境中,当两个或多个线程在执行过程中因争夺资源而造成相互等待,这种状态被称为...

    java诊断与调优常用命令jmap、jstack、jstat使用实战.pdf

    3. **jstack**: jstack用于查看Java进程中的线程堆栈信息,帮助定位线程死锁、死循环等问题。它可以提供所有线程的快照、特定线程的堆栈信息、锁的持有情况,甚至检查堆信息。例如,`jstack [进程ID]` 可以直接输出...

    jstack-jboss-7.5.0-Final.zip

    总结来说,这个场景涉及了Java多线程编程中的死锁问题,通过`jstack`工具分析`8508.jstack2.log`文件可以找出可能的死锁链,并结合`logging.properties`文件了解日志配置,进一步深入代码分析以解决问题。在开发Java...

    JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat.doc

    当Java程序出现异常或挂起时,`jstack` 可以帮助分析程序状态,找出导致问题的代码位置。它不仅能读取当前运行进程的堆栈信息,还能解析由程序崩溃时产生的core文件,获取到崩溃时的Java堆栈和本地堆栈信息,这对于...

    最新Java JDK 8安装版(Linux 64位)

    5. **Lambda表达式**:Java 8引入的重要特性之一,它提供了一种简洁的匿名函数表示方式,使得代码更加简洁、易读,特别是在处理集合操作时,配合Stream API可以写出优雅的并行代码。 6. **Stream API**:这是Java 8...

    Jstack分析工具——IBM Thread and Monitor Dump Analyzer for Java

    需要本地安装JDK并配置JAVA环境变量。 之后使用java -jar jca469.jar即可打开工具。 直接将dump出来的堆栈信息,打开,便可分析。

    java引起的linux服务器性能问题查找

    - 如果发现有死循环或者无限递归的情况,需要尽快修改代码逻辑; - 对于频繁调用的方法,可以考虑使用缓存机制减少重复计算; - 如果是由于锁竞争导致的问题,则需要调整锁策略或者使用更高效的并发控制机制。 #...

Global site tag (gtag.js) - Google Analytics