美文网首页Java相关
Java Attach机制

Java Attach机制

作者: 万福来 | 来源:发表于2020-04-03 17:44 被阅读0次

Java Attach机制

在JVM运行时,我们经常需要获取目标JVM运行时的相关信息。最典型的一个场景就是通过jstack命令输出当前的线程dump。
对于这种场景,java提供了attach机制。通过attach机制,我们可以直接attach到目标JVM进程,然后进行一些操作,比如获取内存dump、线程dump,类信息统计(比如已加载的类以及实例个数等),动态加载agent,动态设置vm flag(但是并不是所有的flag都可以设置的,因为有些flag是在jvm启动过程中使用的,是一次性的),打印vm flag,获取系统属性等。

Attach实现原理

attach机制的实现涉及到了进程间的通信。那么Attach机制是如何让两个JVM进程之间可以正常通信呢?经常通过jstack查看线程dump的同学可能会留意到下面这个两个线程:

"Attach Listener" #10 daemon prio=9 os_prio=31 tid=0x00007fef2283a000 nid=0x4b03 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
"Signal Dispatcher" #4 daemon prio=9 os_prio=31 tid=0x00007fef22030000 nid=0x3907 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

这两个线程都是JVM线程。其中每个JVM都会有Signal Dispatcher线程,用于处理信号。Attach Listener线程用于JVM进程间的通信,但是它不一定会启动,启动它有两种方式。

Attach Listener启动方式

  • java程序启动的时候通过jvm参数指定启动该线程;增加 -XX:+StartAttachListener;
  • attach目标JVM成功后,目标JVM启动该线程。如果程序启动时没有启动该线程,则依靠Signal Dispatcher线程收到attach信号后启动线程。
  • Attach Listener线程启动后创建一个监听套接字,并创建一个socketFile,客户端和目标JVM进程就通过这个socketFile进行通信,客户端发送相关命令到socketFile,Attach Listener监听这个socketFile,发下有请求命令,就直接解析,然后调用命令对应的方法,最后返回结果给客户端。

相关文章

  • Java Attach机制之Java篇

    Java Attach机制,初次接触是长成以下这样的: VirtualMachine.attach(pid); 当...

  • Java Attach机制

    一、什么是Attach机制? 简单点说就是jdk的一些工具类提供的一种jvm进程间通信的能力,能让一个进程传命令给...

  • Java Attach机制

    Java Attach机制 在JVM运行时,我们经常需要获取目标JVM运行时的相关信息。最典型的一个场景就是通过j...

  • Java Attach机制简介

    也可以看我CSDN的博客:https://blog.csdn.net/u013332124/article/det...

  • java attach机制源码阅读

    概述 在日常工作中经常会用到jstack,jmap等命令,那么这些命令是怎么与运行中的jvm进程通讯的呢?下文以l...

  • Java Attach机制之Native篇

    在《Java Attach机制之Java篇》中主要跟踪到了Java层的代码,下面来围绕上篇中以下3个问题去跟踪Na...

  • Java利用Attach机制与Agent

    1.首先启动一个tomcat,jps查看进程。 2.编写agent并打包。 maven 配置是为了确保jar包打出...

  • Attach机制-整理

    从JDK6开始引入,除了Solaris平台的Sun JVM支持远程的Attach,在其他平台都只允许Attach到...

  • JVM Attach机制

    Attach功能和流程分析转自:http://lovestblog.cn/blog/2014/06/18/jvm-...

  • 在使用RecylerView 的notifyItemChange

    java.lang.IllegalArgumentException: Called attach on a ch...

网友评论

    本文标题:Java Attach机制

    本文链接:https://www.haomeiwen.com/subject/erekphtx.html