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

反编译

混淆保护

扩展阅读