Java 工具(jmap,jstack)在linux上的源碼分析(一)__資料結構

來源:互聯網
上載者:User

在我們常用的Jstack, Jmap 用於分析java虛擬機器的狀態的工具,通過起另一個虛擬機器通過運行sun.tools包下的java檔案,去跟蹤另一個虛擬機器的狀態。


如果讓你設計一個跟蹤另一個進程的方法,你也通常會考慮這幾種常用的方式。

第一種,就是通知被跟蹤的進程,讓進程執行相應的訊息,同時對該訊息做出反應。

第二種,就是通過核心的調用,直接能夠訪問進程的記憶體,堆棧情況,通過分析被跟蹤的進程的記憶體結構,從而知道當前被跟蹤的進程的狀態。

第一種方式

優勢:

對調用者和被調用者只要達成簡單的通訊協議,調用者無需知道被調用者的邏輯,結構,只需要簡單的發送命令的方式,被調用者能夠接受到命令,並且對該命令進行回應就可以。

缺點:

如果被調用者當時的狀態本來就不正常,或者繁忙,沒辦法對該命令做出響應,那這個跟蹤進程往往是在規定的等待時間裡,無法返回正確的需要的資訊。其次被調用者在分析的過程中,有可能需要暫停進程中的其他的線程,而對被跟蹤的進程有一定的影響。

第二種方式

優勢:

通過核心的支援,訪問被跟蹤的記憶體,並作出快照,後台分析,很少影響被跟蹤的進程。

缺點:

這種方式需要對被跟蹤程的記憶體配置和使用非常的瞭解,無法解耦,而本身系統核心調用也會出問題。


Java工具類中也是大致實現了這2中方式,工具中會先選擇第一種方式,如果發現第一種方式不能成功,將會建議使用-F參數,也就是第二種方式。

我們先講第一種方式。

既然是需要向被跟蹤進程發出命令,在linux中可以選擇多種方式進行進程中通訊 共用記憶體,檔案之類,其中建立socket的檔案實現通訊是比較簡單的方法。

下面是整個的流程圖:



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.