`

Java 工具(jmap,jstack)在linux上的源码分析(三)执行的线程vm thread

 
阅读更多

在前面的博客中(http://blog.csdn.net/raintungli/article/details/7034005)所提到的信号转发线程,Attach Listener 线程都只是操作socket文件,并没有去执行比如stack 分析,或者heap的分析,真正的工作线程其实是vm thread.

(一)启动vm thread

我们可以看到,在thread.cpp里启动了线程vm thread,在这里我们同时也稍微的略带的讲一下jvm在linux里如何启动线程的。

通常在linux中启动线程,是调用


而在java里却增加了os:create_thread --初始化线程 和os:start_thread--启动线程

我们去看一下jvm里面是如何在linux里做到的

在os_linux.cpp中来看create_thread的方法

继续看java_start方法


首先jvm先设置了当前线程的状态是Initialized, 然后notify所有的线程,

while (osthread->get_state() == INITIALIZED) {
sync->wait(Mutex::_no_safepoint_check_flag);
}

不停的查看线程的当前状态是不是Initialized, 如果是的话,调用了sync->wait()的方法等待。

来看os:start_thread的方法 os.cpp

这时候设置了线程的状态为runnable,但没有notify线程

在 pd_start_thread(thread)中, os_linux.cpp中


这时候我们看到了notify 线程的操作

也就是这时候notify了线程,因为这时候的线程的状态是RUNNABLE, 方法java_start继续往下执行,于是调用了thread->run()的方法

对于线程vm Thread 也就是调用了vmthread::run方法

vmThread.cpp

调用了loop函数,处理了VM_Operation 的queue 关于queue的级别和优先级处理算法:可以参考 另一篇博客:http://blog.csdn.net/raintungli/article/details/6553337

(二)Jstack 运行在vm thread里的VM_Operation

jstack 处理也就是在前面博客所提到的attach Listener 线程所做的 operation

简单看一下类VM_PrintThreads 它 继承了VM_Operation

当调用VMThread::execute()也就是将VM_PrintThreads 放入了_vm_queue中,交给vm thread 处理,对vm thread来说取出queue里的VM_Operation,并且调用doit方法。

在jstack里,attach listener 的线程产生了VM_PrintThreads,VM_PrintJNI,VM_FindDeadlocks 3个operations,交给了vm thread 的线程处理。


分享到:
评论

相关推荐

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

    在 Kubernetes 环境中,运行 Java 程序时,无法使用 jmap 和 jstack 命令进行性能分析和诊断。这种情况下,无法获取 Java 进程的 pid,导致无法使用 jmap 和 jstack 命令。 解决方案: 1. 了解 Linux 特殊进程 在 ...

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

    JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解 本文将对一些常用的 JVM 性能调优监控工具进行介绍,包括 jps、jstack、jmap、jhat、jstat 等工具的使用详解。这些工具对于 Java 程序员来说是必备的,...

    java使用JMAP定位代码内存泄漏在哪

    JMAP是Java自带的一个命令行工具,它提供了对Java堆内存的详细分析功能,可以帮助我们诊断内存泄漏。JMAP的主要功能包括: 1. **生成堆转储文件**:通过`jmap -dump:format=b,file=<filename> <pid>`命令,我们可以...

    JVM监控工具介绍jstack_jconsole_jinfo_jmap_jdb_jstat

    jstack工具目前仅在Solaris和Linux的JDK版本中提供。 jconsole jconsole是一个基于Java Management Extensions (JMX)的实时图形化监测工具。该工具利用了内建到JVM中的JMX指令,提供实时的性能和资源的监控,包括...

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

    `jstack` 是一个强大的工具,用于获取Java应用的线程堆栈信息。当Java程序出现异常或挂起时,`jstack` 可以帮助分析程序状态,找出导致问题的代码位置。它不仅能读取当前运行进程的堆栈信息,还能解析由程序崩溃时...

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

    本文主要介绍了四个Java命令行工具:jps、jmap、jstack和jstat,它们是Java性能分析和故障排查的基础。 1. **jps (Java Process Status)**: 用于查看运行在本地机器上的Java进程ID,这对于其他命令来说是必需的输入...

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

    首先,`jstack`是一个用于打印Java线程堆栈跟踪的工具。当应用出现死锁或者线程阻塞时,jstack可以帮助我们查看各个线程的状态,找出问题所在。通过`jstack <pid>`命令,我们可以获取到Java进程的详细线程信息,包括...

    jmap、jstack、jstat组合使用定位jvm问题.txt

    jmap、jstack、jstat组合使用定位jvm问题

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

    这些工具包括IBM Thread and Monitor Dump Analyzer for Java、HeapAnalyzer以及可能的GA441(可能是另一个内存分析工具的简称,但未提供详细信息)。以下将详细介绍这些工具的功能和使用方法。 **IBM Thread and ...

    tda分析线程dump的工具

    线程 Dump 分析是 IT 系统性能优化中不可或缺的一部分,尤其在 Java 应用程序中,当系统出现响应慢或者卡死等异常情况时,通过获取和分析线程 Dump 文件,我们可以找出导致问题的线程,定位内存泄漏、死锁等问题。...

    java dump分析工具ha456

    本文将详细探讨Java内存分析、dump分析、jmap和jstack工具的使用,以及如何利用这些工具进行堆栈分析。 首先,Java内存分析主要关注的是程序运行时的内存分配和管理。Java内存分为堆内存(Heap)、栈内存(Stack)...

    jmap Eclipse内存分析工具.rar

    **jmap Eclipse内存分析工具详解** 在Java开发中,内存管理是至关重要的,尤其是在大型应用或者长时间运行的服务中,内存泄漏可能导致系统性能下降甚至崩溃。为了有效地检测和诊断内存问题,Oracle提供了`jmap`...

    Linux下启动JAVA

    为了监控Java应用的性能,可以使用`jps`(Java进程状态)列出运行中的Java进程,`jstat`(JVM统计监测工具)查看JVM的统计信息,`jmap`(内存映射工具)生成堆转储,以及`jhat`(堆分析工具)分析堆转储。...

    通过jstack与jmap分析一次线上故障.pdf

    通过jstack与jmap分析一次线上故障.pdf

    java在linux下的配置

    `JDK`自带了一些实用工具,如`jps`(Java进程查看器),`jinfo`(获取Java进程配置信息),`jmap`(内存映射工具),`jstack`(线程堆栈跟踪)等。这些工具可以帮助开发者进行性能监控和问题排查。 除此之外,`...

    Troubleshooting Guide for Java

    jstack可以获取Java进程的线程堆栈轨迹,这对于分析死锁和长时间运行的线程等问题非常有用。 #### 九、jstat工具 jstat是一个命令行工具,用于显示JVM的统计信息,包括GC活动、堆内存使用等。 #### 十、visualgc...

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

    8. **安装过程**:在Linux系统上安装JDK 8通常涉及解压下载的文件,设置环境变量如`JAVA_HOME`,并将路径添加到`PATH`变量中,确保系统能够找到并执行Java命令。 9. **开发和运行Java程序**:安装完成后,开发者...

    Java内存泄露_JVM监控工具介绍

    jstack命令是一个强大的工具,用于分析Java程序的崩溃原因和堆栈信息。它可以将core文件转换为人类可读的格式,方便开发者快速定位问题所在。如果Java程序崩溃生成core文件,jstack工具可以用来获得core文件的Java栈...

    Java性能监控工具

    在Java中,有一些内置的工具可以用来监控和分析性能,包括内存使用、垃圾回收等方面。 首先,`jps`命令类似于Linux的`ps`命令,用于列出本地正在运行的Java进程ID。`jstat`工具则可以提供虚拟机(VM)的各种统计...

Global site tag (gtag.js) - Google Analytics