概覽
最近老大布置的任務就是質量加固,偶然看到了一些對於 Java 性能分析的介紹,因此,有了此篇學習筆記。
JDK本身提供了很多方便的JVM性能調優監控工具,除了集成式的VisualVM和jConsole外, 還有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,每一種工具都有其自身的特點, 用戶可以根據你需要檢測的應用或者程序片段的狀況,適當的選擇相應的工具進行檢測, 先通過一個表格形式簡要介紹下這幾個命令的作用和使用方法。本文重點介紹 jps 的使用方法
命令 | 作用 |
---|---|
jps | 基礎工具 |
jstack | 查看某個Java進程內的線程堆棧信息 |
jmap | jmap導出堆內存,然后使用jhat來進行分析 |
jhat | 主要用來解析java堆dump並啟動一個web服務器,然后就可以在瀏覽器中查看堆的dump文件 |
jstat | 主要是對java應用程序的資源和性能進行實時的命令行監控,包括了對heap size和垃圾回收狀況的監控 |
hprof | hprof能夠展現CPU使用率,統計堆內存使用情況 |
簡介
jps 全稱 JVM Process Status Tool
,命令位於 jdk 的 bin 目錄下,其作用是顯示當前系統的 Java 進程情況,及其 pid 號。他是 Java自帶的一個命令。
jps
命令用來查看所有 Java 進程,每一行就是一個 Java 進程信息。
jps
僅查找當前用戶的 Java 進程,而不是當前系統中的所有進程,要顯示其他用戶的還只能用 ps
命令。
jps 常用參數
jps -l
如果是以 class 方式運行,會顯示進程的主類main.class
的全名,如果是以 jar 包方式運行的,就會輸出 jar 包的完整路徑名:
第一列的數字就是進程的 pid
jps -v
輸出傳遞給 JVM 的參數,v
表示虛擬機,jps -vl
比較常見的組合;jps -V
大寫v
,表示通過文件傳遞給 JVM 的參數
# michael @ Michael-MBP in ~ [16:37:59]
$ jps -v |grep Mybatis
8005 MybatisDemoApplication -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:53364,suspend=y,server=n -XX:TieredStopAtLevel=1 -Xverify:none -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=53363 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=127.0.0.1 -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -javaagent:/Users/michael/Library/Caches/IntelliJIdea2018.2/captureAgent/debugger-agent.jar=file:/private/var/folders/m1/ydypchs901lffc5sms07mrp40000gn/T/capture.props -Dfile.encoding=UTF-8
jps -m
輸出傳遞給main.class
方法的參數,實用的一個命令,jps -ml
比較實用的組合,會顯示包名/類名/參數jps -q
只輸出進程的 pid
總結
jps 是比較常用的 Java 命令。使用 jps 可以查看當前有哪些 Java 進程處於運行狀態。如果運行了一個 web 應用(使用tomcat、jboss、jetty等啟動)的時候,就可以使用 jps 查看啟動情況。
有的時候我想知道這個應用的日志會輸出到哪里,或者啟動的時候使用了哪些javaagent,那么我可以使用 jps -v
查看進程的jvm參數情況。
參考
- Java命令學習系列(一)——Jps
- 博客園-java 線上問題定位工具
- 油管視頻-Java 性能分析工具 #01 內置工具 jps 介紹 UP 主是個中國人,所以,這個視頻是中文的
- 官宣-jps-api
- 飛污熊-JVM性能分析工具jstack介紹