JVM維護(hù)常用命令

1. JPS

jps工具位于%JAVA_HOME%\bin目錄下,用于顯示所有java進(jìn)程pid的命令,適合在linux/unix平臺上查看當(dāng)前java進(jìn)程的一些簡單情況。

java程序啟動后,會在java.ip.tmpdir目錄下,產(chǎn)生一個(gè)hsperfdata_username的文件夾,每一個(gè)java進(jìn)程都會在該文件夾下生成一個(gè)以java pid為文件名的文件,文件內(nèi)容包含一系列進(jìn)程詳情。所以jps命令的執(zhí)行只是簡單列出文件夾所有文件名稱和解析文件內(nèi)容顯示而已。

但是jps只能查看當(dāng)前用戶下啟動的java進(jìn)程

jps參數(shù)
  • -q 不顯示class名稱,jar文件名和傳遞給main 方法的參數(shù)
  • -m 輸出傳遞給main 方法的參數(shù)
  • -l 輸出應(yīng)用程序main class的完整package名 或者 應(yīng)用程序的jar文件完整路徑名
  • -v 輸出傳遞給JVM的參數(shù)

例:



2. jstack

jstack主要用來查看某個(gè)Java進(jìn)程內(nèi)的線程堆棧信息。其用法如下:

jstack [ option ] pid
jstack [ option ] executable core
jstack [ option ] [server-id@]remote-hostname-or-IP

相關(guān)參數(shù)如下:

  • -l long listings,會打印出額外的鎖信息,在發(fā)生死鎖時(shí)可以用jstack -l pid來觀察鎖持有情況
  • -m mixed mode,不僅會輸出Java堆棧信息,還會輸出C/C++堆棧信息(比如Native方法)

jstack可以導(dǎo)出線程堆棧,通過線程堆棧可以定位到具體代碼。

線上報(bào)警的基本處理方案:

  • jps -l 得到j(luò)ava進(jìn)行的進(jìn)程id(13176)
  • top -H -p 13176 獲得進(jìn)程13176的線程占用資源情況
  • 按cpu使用情況排序(shift + p),觀察線程占用cpu情況,得到最耗用CPU的線程id為20296
  • dump出線程堆棧信息, jstack 13176 >> jstack.log
  • 查找最耗cpu的線程的堆棧情況,printf '%x' 20296 (4f48)
  • 根據(jù)4f48查看堆棧的信息,定位具體代碼分析問題
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容