`

Jstack查找线程运行问题

    博客分类:
  • java
 
阅读更多

1 Jstack是JVM自带的可以查看线程运行情况的工具,线程死锁, 以及拿到线程dump来排查线程情况的工具。

 

当服务器上的cpu占用过大

1) top命令查看cpu占用过大的的进程

2) top -Hp pid ,查看这个pid下面所有线程占用cpu的情况

3)jstack -F  线程pid 拿到这个线程的堆栈情况,可以找到有个线程中有我们自己的包或类

4)分析这个线程状态信息,查看具体代码是否有问题 

 

测试代码:

   主类:

package com;

import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * Hello world!
 *
 */
public class App 
{
    static AtomicInteger count = new AtomicInteger(0);

    static ExecutorService executor1 = Executors.newFixedThreadPool(10) ;
//    Executor executor2 = Executors.newFixedThreadPool(10) ;



    public static void main( String[] args )
    {
        Object lockObj = new Object();
        TestThread1 testThread1 = new TestThread1(lockObj,"t_1");
        TestThread1 testThread2 = new TestThread1(lockObj,"t_2");
        executor1.execute(testThread1);
        executor1.execute(testThread2);

    }

}

 2 线程类:

  

package com;

/**
 * Created by admin on 2017/4/18.
 */
public class TestThread1  implements Runnable {

    Object lockObj ;
    String name;

    public TestThread1(Object lockObj,String name ) {
        this.lockObj = lockObj ;
        this.name = name;
    }

    @Override
    public void run() {
        caculate();
    }

    public void caculate(){
        while(true){
            synchronized (lockObj){
//            try {
//                Thread.sleep(500);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
                App.count.getAndAdd(1);
                System.out.println( App.count.get() + " "+ name);
            }

        }
    }
}

 3) jar放到linux上,运行jar包 java -cp test-1.0-SNAPSHOT.jar  com.App

4)

 

 

分享到:
评论

相关推荐

    线程监控工具,查找异常线程

    本文将深入探讨线程监控工具的功能、用途,以及如何利用这些工具查找并解决异常线程问题。 线程监控工具主要功能: 1. **线程查看**:这类工具能够列出运行中的所有线程,包括线程ID、状态(如运行、等待、阻塞等)...

    JVM---jstack分析Java线程CPU占用,线程死锁的解决

    在实际生产环境中,线程问题可能更加复杂,需要仔细分析`jstack`输出的线程堆栈信息,结合业务逻辑,逐步定位和解决问题。同时,优化代码、合理设计锁策略以及使用并发工具类(如`ConcurrentHashMap`、`...

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

    - 通过`jstack`命令输出的信息,可以发现在某一时间段内有大量的GC线程在运行。 - 进一步分析`jstack`的输出,可以发现某段代码频繁地创建并释放大量的小对象,这些小对象会被加载到JVM的年轻代中。 - 当年轻代...

    MPP的jstack分析结果

    4. **监控线程**:在MPP系统中,还有一些特殊的监控线程,如垃圾收集器、线程池管理线程等,jstack也会报告这些线程的状态,帮助我们评估JVM的运行状况。 在分析jstack输出时,我们需要注意以下几点: - **死锁...

    教你找出 运行java项目,使cpu 100%,如何排查出是哪个jar包的哪个线程导致的

    在Java开发过程中,有时会遇到项目运行时CPU占用率达到100%的问题,这可能是由于某个线程的无限循环、阻塞或者资源消耗过大导致的。以下是一套详细的排查步骤来帮助你找出是哪个jar包的哪个线程造成了这个问题。 ...

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

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

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

    ### Java引起的Linux服务器性能问题查找 在现代企业的IT架构中,Java应用十分普遍,而Linux作为最常用的服务器操作系统之一,其稳定性和灵活性受到广泛认可。然而,在实际运行过程中,Java应用可能会导致Linux...

    JVM监控实例数 windows监控 线程测试 单例模式下测试JVM实例是否一个

    `jstack`会输出每个线程的详细信息,包括线程ID、状态、锁信息等,这对于查找死锁或分析线程阻塞原因非常有帮助。 在单例模式下测试JVM实例是否唯一,可以通过设置一个全局静态变量或者使用Singleton类的静态方法来...

    【JAVA WEB实用技巧与优化方案】如何排查JVM线程和内存相关问题

    在Java Web开发中,性能优化和问题排查是关键任务,特别是涉及到JVM(Java Virtual Machine)线程和内存的问题。本文将深入探讨如何利用“javacore”分析工具以及IBM Thread and Monitor Dump Analyzer来有效诊断和...

    【转】Java内存泄露_JVM监控工具介绍jstack_jconsole_jinfo_jmap_jdb_jstat

    通过`jstack <pid>`命令,我们可以获取到Java进程的详细线程信息,包括线程ID、线程状态和调用堆栈,这对于定位线程问题非常有帮助。 其次,`jconsole`是一个图形化的JVM监视工具,它可以提供内存使用情况、线程...

    java IBM 分析工具(线程、gc、内存)

    - 创建线程转储:当遇到应用程序无响应或性能问题时,可以通过JVM提供的`jstack`命令生成线程转储文件。 - 打开分析器:将线程转储文件加载到IBM Thread and Monitor Dump Analyzer中。 - 分析:工具会自动识别并...

    多线程下常用调试命令1

    当我们遇到线程阻塞或死锁的情况时,`jstack`可以帮助我们分析线程的状态,找出问题的根源。例如,`jstack <pid>`会打印指定进程的线程堆栈信息。 - `jmap`: `jmap`用于获取堆内存的详细信息,如垃圾收集器的状态...

    JAVA分析进程占用过大原因

    如果已知具体的问题线程ID,则可以通过`jstack -l [Java_PID] | grep "4ce2"`命令直接查看该线程的堆栈信息。 - 查看最后10行堆栈信息,通常这些信息包含了最耗时的操作,有助于快速定位问题。 #### 三、分析...

    linux服务器应用卡死性能问题排查

    这将显示出该线程在运行时的详细堆栈信息,包括调用栈上的每一个方法,这对于理解线程当前的状态至关重要。通过分析这些信息,我们可以找出导致性能问题的代码片段,如死锁、CPU密集型计算或阻塞操作。 除了上述...

    tda-master.zip

    4. **问题排查**:根据分析结果,定位可能的问题,例如查找死锁、分析长时间等待的线程等。 5. **优化与调试**:根据分析结果进行代码优化,调整线程配置,然后再次进行线程转储和分析,确认问题是否已解决。 **...

    TDA-Thread Dump Analyzer - tda-bin-2.3.3.zip

    当系统出现性能问题、响应缓慢或无响应时,通常需要通过分析线程Dump来查找原因。TDA(Thread Dump Analyzer)是一个专门用于解析和分析Java线程Dump的日志文件的工具,它可以帮助开发者快速定位线程阻塞、死锁等...

    70-Java程序CPU占用1001

    运行`jstack pid > cpu.log`,将指定PID的线程堆栈信息输出到名为`cpu.log`的文件中。`pid`是刚才获取的进程ID。这一步骤会生成一个包含所有线程详细状态的日志文件,便于分析。 5. **分析`jstack`输出** 有了`cpu...

    Java Thread Dumps 分析

    Java线程转储(Thread Dump)是Java应用程序在特定时间点对所有运行线程的状态快照,它包含每个线程的详细信息,如线程ID、线程名称、线程状态以及栈轨迹。分析Java线程转储对于诊断Java应用程序中的性能问题、死锁...

Global site tag (gtag.js) - Google Analytics