1 基于jdk命令行的工具
1.1jvm的参数类型
- 标准参数
-help
-server -client
-version -showversion
-cp -classpath
- X参数
非标准化参数
-Xint :解释执行
-Xcomp : 第一次使用就编译成本地代码
-Xmixed: jvm决定是否编译成本地代码
- XX参数
Boolean类型
格式:-XX:[+-]<name>标识启用或者禁用name属性
案例:-XX:+UseG1Gc
key=value类型
格式:-XX:<key>=<value> 表示name属性的值是value
案例:-XX:MaxGcMillis=500
注意:-Xms等价于-XX:InitialHeapSize,-Xmx等价于-XX:MaxHeapSize
1.2 查看jvm运行时的参数
官方工具文档
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.html
常用命令
-XX:+PringFlagsInital
=表示默认值
:=表示被用户或者jvm修改后的值
-XX:+PringFlagsFinal
-XX:+UnlockExperimentalVMOptions //解锁实验参数
-XX:+UnlockDiagnosticVMOptions //解锁诊断参数
-XX:PringCommandLineFlags
jstat查看jvm统计信息
类加载信息
Gc信息
jit编译
jps
jinfo
1.3jmap+MAT内存溢出
1 导出内存映像文件
1.1 内存溢出自动导出
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./
1.2 使用jmap命令手动导出
jmap -help
jmap -dump:format=b,file=heap.hprof pid
2 使用mat工具分析内存溢出
1.4 jstack查看线程状态
// 查看java进程pid
jps -l
//将这个栈信息输出到指定的文件
jstack pid > pid.txt
top -H -p pid # 显示某个进程所有活跃的线程消耗情况
1.5 基于JVisualVm的可视化监控
https://visualvm.github.io/documentation.html
1.6 基于Btrace的
https://www.jianshu.com/p/93e94b724476
BTrace是Java的安全可靠的动态跟踪工具。 他的工作原理是通过 instrument + asm 来对正在运行的java程序中的class类进行动态增强.
拦截方法
普通方法:@OnMethod(clazz="",method="",location=() )
构造方法:@OnMethod(clazz="",method="<init>,location=() )
同名方法:根据方法的参数类型区别
拦截时机
Kind.ENTRY //入口,默认
Kind.RETURN
Kind.THROW
Kind.LINE //拦截第多少行的代码
注意事项:调用自己本地的代码。