控制台怎么查看错误的详细信息_Java 程序该怎么优化?命令篇
靈魂拷問,JDK 提供的命令,除了 java、javac,你還用過哪些命令呢?
靈魂再拷問,若你寫的 Java 程序,出現了性能問題,該怎么去排查呢?
Java 作為編程語言中的戰斗機,JDK 默認已經為我們提供了很多排查問題的工具,接下來就逐一認識認識。
1. jps
jps 命令,可以列出系統中所有運行 Java 進程,并可以查看 Java 進程的啟動類、傳入參數以及 JVM 參數等信息。
例如,在控制臺輸入 jps -lmv 命令,效果如下(截取部分內容)。
很顯然,jps 背后是一個 Java 程序,列出了完整的類路徑、傳給 main 方法的參數,以及 JVM 的參數。
為了方便了解、查閱,對 jps 命令的參數進行大致的梳理。
另外,不要大驚小怪,jps 以及下面要提到的 JDK 的排查工具,本質都是 Java 程序。
2. jstat
jstat 命令,用于查看 Java 進程的堆使用情況以及 GC 情況。
例如,輸出 Java 進程 90961 的類加載相關信息,每秒鐘統計一次信息,一共輸出 3 次。
控制臺輸入命令:jstat -class 90961 1000 3,效果如下。
例如,顯示 GC 相關的堆信息。
控制臺輸入命令:jstat -gc 90961,效果如下。
例如,顯示最近一次 GC 的原因及當前 GC 的原因。
控制臺輸入命令:jstat -gccause 90961,效果如下。
參數含義解釋:LGCC:上次 GC 的原因;GCC:當前 GC 的原因。另外,為了方便了解、查閱,對 jstat 命令的參數進行大致的梳理。
3. jinfo
jinfo 命令,可以幫我們查看正在運行的 Java 進程的擴展參數,并支持在運行時修改部分參數;可以很方便地幫我們找到 JVM 參數的當前值。
例如,查看 Java 進程 90961 是否開啟打印 GC 詳細信息。
命令:jinfo -flag PrintGCDetails 90961
例如,打開 Java 進程 90961 的 PrintGCDetails 開關。
命令:jinfo -flag +PrintGCDetails 90961
例如,關閉 Java 進程 90961 的 PrintGCDetails 開關。
命令:jinfo -flag -PrintGCDetails 90961
使用比較簡單,就不貼效果啦。
另外,為了方便了解、查閱,對 jinfo 命令的參數也進行大致的梳理。
4. jmap
jmap 命令,可以幫我們生成 Java 進程的堆快照和對象的統計信息。
例如,生成 PID 為 90961 的 Java 進程的對象統計信息,并輸出到 yyxj.txt 文件中。
控制臺輸入命令:jmap -histo 90961 > yyxj.txt,打開文件效果如下。
例如,生成 PID 為 90961 的 Java 進程的當前堆快照,輸出到 heap.hprof 文件中。
命令:jmap -dump:format=b,file=heap.hprof 90961
對于輸出的 heap.hprof 快照文件,可以使用 jhat、VisualVM 等工具打開查看。采用 VisualVM 工具查看,效果如下。
5. jhat
jhat 命令,用于分析 Java 程序的堆快照內容,并且在分析完成之后,啟動一個 HTTP 服務,讓我們可以通過瀏覽器查看 Java 堆快照信息。
例如,采用 jhat 分析上一步中 jmap 輸出的堆快照文件。
輸入命令:jhat heap.hprof,效果如下。
瀏覽器訪問 http://127.0.0.1:7000,一探究竟。
另外,唯恐堆快照會比較大,jhat 還支持 OQL 語句查詢堆快照信息,閑暇之余可參考幫助手冊 http://127.0.0.1:7000/oqlhelp/ 進行深入了解。
6. jstack
jstack 命令,可以幫助我們導出 Java 程序的線程堆棧,并自動幫我們進行死鎖檢查,并輸出找到的死鎖信息。
例如,把 PID 為 92760 的 Java 進程的線程堆棧信息,輸出保存到文件中。
命令:jstack -l 92760 > deadlock.txt,打開 deadlock.txt,進程的內部細節,一覽無余,那么我們很容易,就能找到死鎖。
7. 其它
本次提到的這些命令,建議有時間實操一遍,因為紙上得來終覺淺,絕知此事要躬行。
JDK 提供的排查問題的命令還有很多,時間關系,本次就不再一一列舉。
后續會進行實戰分析,看看如何把這些命令組合起來,去打一套好的組合拳出來,敬請期待。
推薦閱讀:
Java 程序該怎么優化?技巧篇
總結
以上是生活随笔為你收集整理的控制台怎么查看错误的详细信息_Java 程序该怎么优化?命令篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop基础-Hdfs各个组件的运行
- 下一篇: PowerShell变量——PowerS