JDK 工具命令
jps(Java Virtual Machine Process Status Tool)
命令示例:jps -l
應用場景:列出當前系統中所有Java進程的PID和主類名,常用于快速定位Java應用的進程ID。
javac(Java Compiler)
命令示例:javac Main.java
應用場景:將Java源文件編譯為字節碼文件(.class文件),是開發過程中最基礎的編譯工具。
java(Java Application Launcher)
命令示例:java -jar app.jar
應用場景:運行已編譯的Java程序或可執行的JAR包,支持設置JVM參數如內存大小(-Xmx
)。
javap(Java Class File Disassembler)
命令示例:javap -c MyClass
應用場景:反編譯.class文件,查看字節碼指令,用于調試或分析代碼邏輯。
jstack(Java Stack Trace)
命令示例:jstack -l <pid>
應用場景:生成Java進程的線程快照,用于分析線程死鎖或高CPU占用問題。
jmap(Java Memory Map)
命令示例:jmap -heap <pid>
應用場景:查看Java堆內存使用情況,包括分代內存統計,常用于內存泄漏分析。
jstat(JVM Statistics Monitoring Tool)
命令示例:jstat -gc <pid> 1000 5
應用場景:監控JVM垃圾回收狀態,每1秒輸出一次,共5次,用于GC性能調優。
jinfo(Java Configuration Info)
命令示例:jinfo -flags <pid>
應用場景:查看或動態修改JVM參數(如-XX:+PrintGCDetails
),適用于運行時調試。
jconsole(Java Monitoring and Management Console)
命令示例:jconsole
應用場景:圖形化監控JVM內存、線程、類加載等信息,適合直觀分析運行時狀態。
jcmd(JVM Diagnostic Command Tool)
命令示例:jcmd <pid> VM.flags
應用場景:多功能診斷工具,可獲取JVM屬性、線程轉儲、堆轉儲等。
應用運行命令
運行普通類文件
命令示例:java -cp .:lib/* com.example.Main
應用場景:指定類路徑(含依賴庫)啟動主類,適用于未打包的非模塊化項目。
運行可執行JAR
命令示例:java -Xms512m -Xmx1024m -jar app.jar --spring.profiles.active=prod
應用場景:啟動Spring Boot等打包應用,設置堆內存大小和激活生產環境配置。
動態附加代理
命令示例:java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar app.jar
應用場景:啟用遠程調試端口(5005),供IDE連接進行調試。
模塊化應用運行
命令示例:java --module-path mods -m com.module/com.module.Main
應用場景:運行JPMS模塊化應用,需指定模塊路徑和主模塊。
性能分析啟動
命令示例:java -XX:+FlightRecorder -XX:StartFlightRecording=duration=60s,filename=myrecording.jfr -jar app.jar
應用場景:啟用Java Flight Recorder進行性能分析記錄,生成JFR文件供后續分析。
系統屬性傳遞
命令示例:java -Dlog4j.configurationFile=/path/to/log4j2.xml -Duser.timezone=GMT+8 -jar app.jar
應用場景:設置日志配置文件和時區等系統屬性。
典型組合場景
內存泄漏分析
jmap -dump:live,format=b,file=heap.hprof <pid> jstack <pid> > thread_dump.txt
生成堆轉儲和線程轉儲,結合MAT工具分析。
GC調優監控
jstat -gcutil <pid> 1s java -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -jar app.jar
實時監控GC狀態并調整G1垃圾回收器參數。