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、状态(如运行、等待、阻塞等)...
在实际生产环境中,线程问题可能更加复杂,需要仔细分析`jstack`输出的线程堆栈信息,结合业务逻辑,逐步定位和解决问题。同时,优化代码、合理设计锁策略以及使用并发工具类(如`ConcurrentHashMap`、`...
- 通过`jstack`命令输出的信息,可以发现在某一时间段内有大量的GC线程在运行。 - 进一步分析`jstack`的输出,可以发现某段代码频繁地创建并释放大量的小对象,这些小对象会被加载到JVM的年轻代中。 - 当年轻代...
4. **监控线程**:在MPP系统中,还有一些特殊的监控线程,如垃圾收集器、线程池管理线程等,jstack也会报告这些线程的状态,帮助我们评估JVM的运行状况。 在分析jstack输出时,我们需要注意以下几点: - **死锁...
在Java开发过程中,有时会遇到项目运行时CPU占用率达到100%的问题,这可能是由于某个线程的无限循环、阻塞或者资源消耗过大导致的。以下是一套详细的排查步骤来帮助你找出是哪个jar包的哪个线程造成了这个问题。 ...
在介绍如何使用jstack分析并解决Java进程中的死锁问题之前,我们首先需要了解什么是死锁以及它为何会在多线程程序中发生。在多线程环境中,当两个或多个线程在执行过程中因争夺资源而造成相互等待,这种状态被称为...
### Java引起的Linux服务器性能问题查找 在现代企业的IT架构中,Java应用十分普遍,而Linux作为最常用的服务器操作系统之一,其稳定性和灵活性受到广泛认可。然而,在实际运行过程中,Java应用可能会导致Linux...
`jstack`会输出每个线程的详细信息,包括线程ID、状态、锁信息等,这对于查找死锁或分析线程阻塞原因非常有帮助。 在单例模式下测试JVM实例是否唯一,可以通过设置一个全局静态变量或者使用Singleton类的静态方法来...
在Java Web开发中,性能优化和问题排查是关键任务,特别是涉及到JVM(Java Virtual Machine)线程和内存的问题。本文将深入探讨如何利用“javacore”分析工具以及IBM Thread and Monitor Dump Analyzer来有效诊断和...
通过`jstack <pid>`命令,我们可以获取到Java进程的详细线程信息,包括线程ID、线程状态和调用堆栈,这对于定位线程问题非常有帮助。 其次,`jconsole`是一个图形化的JVM监视工具,它可以提供内存使用情况、线程...
- 创建线程转储:当遇到应用程序无响应或性能问题时,可以通过JVM提供的`jstack`命令生成线程转储文件。 - 打开分析器:将线程转储文件加载到IBM Thread and Monitor Dump Analyzer中。 - 分析:工具会自动识别并...
当我们遇到线程阻塞或死锁的情况时,`jstack`可以帮助我们分析线程的状态,找出问题的根源。例如,`jstack <pid>`会打印指定进程的线程堆栈信息。 - `jmap`: `jmap`用于获取堆内存的详细信息,如垃圾收集器的状态...
如果已知具体的问题线程ID,则可以通过`jstack -l [Java_PID] | grep "4ce2"`命令直接查看该线程的堆栈信息。 - 查看最后10行堆栈信息,通常这些信息包含了最耗时的操作,有助于快速定位问题。 #### 三、分析...
这将显示出该线程在运行时的详细堆栈信息,包括调用栈上的每一个方法,这对于理解线程当前的状态至关重要。通过分析这些信息,我们可以找出导致性能问题的代码片段,如死锁、CPU密集型计算或阻塞操作。 除了上述...
4. **问题排查**:根据分析结果,定位可能的问题,例如查找死锁、分析长时间等待的线程等。 5. **优化与调试**:根据分析结果进行代码优化,调整线程配置,然后再次进行线程转储和分析,确认问题是否已解决。 **...
当系统出现性能问题、响应缓慢或无响应时,通常需要通过分析线程Dump来查找原因。TDA(Thread Dump Analyzer)是一个专门用于解析和分析Java线程Dump的日志文件的工具,它可以帮助开发者快速定位线程阻塞、死锁等...
运行`jstack pid > cpu.log`,将指定PID的线程堆栈信息输出到名为`cpu.log`的文件中。`pid`是刚才获取的进程ID。这一步骤会生成一个包含所有线程详细状态的日志文件,便于分析。 5. **分析`jstack`输出** 有了`cpu...
Java线程转储(Thread Dump)是Java应用程序在特定时间点对所有运行线程的状态快照,它包含每个线程的详细信息,如线程ID、线程名称、线程状态以及栈轨迹。分析Java线程转储对于诊断Java应用程序中的性能问题、死锁...