2017-07-31 249 views
0

我們都知道Core Dump是分析Unix中各種進程的基本診斷工具。我知道jstack和gcore都用於生成Javacore文件或Core Dump,但我懷疑Gcore主要用於進程,Jstack用於線程。生成核心轉儲時Jstack和gcore之間的區別?

從操作系統的角度來看,雖然進程和線程相互關聯(進程只包含線程),但它們在內存/速度/執行方面存在較大差異。那麼gcore會診斷這個過程,jstack會分析這個過程中的線程嗎?

回答

0

GCore在操作系統級別操作,並且您得到了當前正在運行的本機代碼的轉儲。從Java的角度來看,這是不可理解的。

JStack讓你在你的應用程序擁有的所有線程的VM級別(Java堆棧)獲得堆棧跟蹤。您可以從中找到在某個點執行的真正的java代碼。

顯然,GCore幾乎從不使用(太低級,本機代碼...)。本地庫或類似的東西只有真正奇怪的問題可能需要這種工具。

還有一個jmap可以生成一個hprof文件,它是來自您的VM的堆數據。像'Memory Analyser Tool'這樣的工具可以打開hprof,並且可以深入研究發生了什麼(在內存一側)。 如果您的虛擬機由於OutOfMemory而崩潰,您還可以設置參數以在事件發生時獲取hprof。它有助於理解爲什麼(太多的用戶,數據庫查詢獲取太多的數據...)

最後一件事情是,您可以添加一個調試選項,當您啓動您的虛擬機,以便您可以連接到它,並在運行過程中進行調試。如果您有一些您無法在當地環境中重現的奇怪問題,它可以提供幫助。

+0

我從上面假設gcore對於Core Dump很有用,Jstack對Thread Dump很有用。兩者之間的區別可以在鏈接中找到。 https://middlewarebyashok.wordpress.com/2016/03/19/heap-dump-and-threaddump-and-core-dump-explanations/ –

相關問題