Java开源工具在linux上的源码分析(一):跟踪方式

开发 后端
在我们常用的Jstack, Jmap 用于分析java虚拟机的状态的工具,通过起另一个虚拟机通过运行sun.tools包下的java文件,去跟踪另一个虚拟机的状态。

在我们常用的Jstack, Jmap 用于分析java虚拟机的状态的工具,通过起另一个虚拟机通过运行sun.tools包下的java文件,去跟踪另一个虚拟机的状态。

如果让你设计一个跟踪另一个进程的方法,你也通常会考虑这几种常用的方式。

***种,就是通知被跟踪的进程,让进程执行相应的消息,同时对该消息做出反应。

第二种,就是通过内核的调用,直接能够访问进程的内存,堆栈情况,通过分析被跟踪的进程的内存结构,从而知道当前被跟踪的进程的状态。

***种方式

优势:

对调用者和被调用者只要达成简单的通讯协议,调用者无需知道被调用者的逻辑,结构,只需要简单的发送命令的方式,被调用者能够接受到命令,并且对该命令进行回应就可以。

缺点:

如果被调用者当时的状态本来就不正常,或者繁忙,没办法对该命令做出响应,那这个跟踪进程往往是在规定的等待时间里,无法返回正确的需要的信息。其次被调用者在分析的过程中,有可能需要暂停进程中的其他的线程,而对被跟踪的进程有一定的影响。

第二种方式

优势:

通过内核的支持,访问被跟踪的内存,并作出快照,后台分析,很少影响被跟踪的进程。

缺点:

这种方式需要对被跟踪程的内存分配和使用非常的了解,无法解耦,而本身系统内核调用也会出问题。

Java工具类中也是大致实现了这2中方式,工具中会先选择***种方式,如果发现***种方式不能成功,将会建议使用-F参数,也就是第二种方式。

我们先讲***种方式。

既然是需要向被跟踪进程发出命令,在linux中可以选择多种方式进行进程中通讯 共享内存,文件之类,其中创建socket的文件实现通讯是比较简单的方法。

下面是整个的流程图:

原文链接:http://blog.csdn.net/raintungli/article/details/7023092

【系列文章】

  1. Java开源工具在linux上的源码分析(二):信号处理
  2. Java开源工具在linux上的源码分析(三):执行的线程vm thread
  3. Java开源工具在linux上的源码分析(四):safe point
  4. Java开源工具在linux上的源码分析(五):-F参数的bug
  5. Java开源工具在linux上的源码分析(六):符号表的读取
责任编辑:林师授 来源: raintungli的博客
相关推荐

2012-03-02 12:31:50

Javajmapjstack

2012-03-02 12:20:21

Javajmapjstack

2012-03-02 12:25:07

Javajmapjstack

2012-03-02 12:38:49

Javajmapjstack

2012-03-02 13:29:38

Javajmapjstack

2022-06-26 18:09:43

Linux开源

2019-10-16 17:00:51

LinuxUbuntuVMware

2019-05-23 14:36:24

LinuxSOSReportxsos

2013-05-27 14:03:50

Linux跟踪工具

2020-05-09 12:01:40

Linux开源软件SDN

2010-01-27 09:58:59

Linuxunix程序日志

2010-12-22 11:27:23

2021-03-09 11:25:04

Linux开源工具服务器

2014-02-20 11:31:34

last命令审计工具

2019-08-01 09:52:46

LinuxNetData性能监控工具

2018-03-13 11:38:14

2012-05-22 00:28:21

JavaJava开源开源工具

2019-02-19 10:30:29

VirtualBoxKali Linux虚拟机

2020-01-20 14:40:39

工具代码开发

2021-09-01 09:47:25

Linux 工具 开发
点赞
收藏

51CTO技术栈公众号