Java命令行及工具集
工欲善其事必先利其器。
Java基础命令行
java
# 运行jar
java -jar target/demoApp.jar
# cp代表Class Path
java -cp target/demoApp-0.1-SNAPSHOT.jar com.xulizhao.demo.App
jar
# 列出jar内容
jar tf target/demoApp.jar
# 创建
jar cf myJar.jar myClass.class
jar cvf program.jar -C path/to/classes .
# e 参数创建入口
jar cfe myJar.jar myClass myClass.class
# 指定manifest
jar cvfm new.jar myapp/META-INF/MANIFEST.MF -C myapp/ .
# Springboot更新
jar -cfM0 new.jar BOOT-INF/ META-INF/ org/
其他命令
# javap 查看编译器生成的字节码,即 class文件
javap -c App
监控/Profiler工具
dump方式较简单粗暴,推荐使用JMC.
dump文件可使用VisualVM或Eclipse MAT打开。
jps
jps: Java Virtual Machine Process Status Tool
# 先查看已有java进程
jps -v
# 找到CPU占用最高的线程
top -n 1 -H -p [PID]
# PID代表线程ID
# 生成stack trace
jstack [PID] > jstack-out.txt
# 把PID转换成hex值, %d转回
printf "%x\n" 2712
# 搜索,对应nid=0x
cat jstack-out.txt | grep -i a98
Dump
HPROF是用来profile Heap和CPU的内置工具。
会造成JVM停顿,生产环境谨慎执行。
- jmap:导出内存dump
- jstack: 导出线程dump
Heap Dump
- jmap -dump : 运行时获得(会停止java进程)
- 使用hprof命令: java -agentlib:hprof=help
jmap -dump:live,format=b,file=heap.hprof your-pid
Thread Dump
获取ThreadDump
- jstack -l » threadinfo.log
- kill -3
jcmd <pid> Thread.print > <file-path>
自带监控工具集
- Java VisualVM (jvisualvm)
- JConsole (jconsole)
- Java Mission Control (jmc): 使用采样技术(而不是代码植入)
- Diagnostic Command Tool (jcmd)
第三方工具
诊断/调试
- Arthas: 阿里出品的Java诊断利器
- BTrace: 在生产动态监控某些方法的执行时长等信息
Arthas
# 安装
curl -O https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
# 常用命令
sysprop
sysenv
jvm
dashboard
# 高级使用
# 查看CPU使用率top n线程的栈
thread -n 3
# 查看5秒内的CPU使用率top n线程栈
thread -n 3 -i 3000
# 查找线程是否有阻塞
thread -b
# 清除watch/trace等命令的增强代码
reset
# 彻底退出
shutdown
付费Profiler
- JProfiler
- Yourkit
反编译
- GUI
- Byte Buddy:JVM运行时代码生成
- CFR: 支持新版Java的命令行反编译工具
- Android dex反编译:dex2jar
- intellij java decompiler
- Hopper:付费的可执行文件反编译工具