使用虚拟机监控工具,可以让我们更快捷和方便的了解程序的运行情况,帮让我们解决问题、优化代码。 JDK/bin 目录下有着 Java 给我们提供的工具,用于监控JVM的运行状况。
命令说明:每隔250毫秒查询一次虚拟机进程 2764 的 gc 状况,一共查询20次
查询全部配置信息,$LVMID表示虚拟机进程ID
jinfo $LVMID查询BytecodeVerificationLocal参数值
jinfo -flag BytecodeVerificationLocal 29116jmap (Memory Map for Java) 命令用于生成堆转储快照(一般称为 heapdump 或 dump 文件),就是将当前的虚拟机信息以文件的形式保存下来。
jmap 的作用不仅仅是为了获取dump文件,它还可以查询finalize执行队列、java堆和永久代的详细信息,如空间使用率、当前用的是哪种收集器等。
选项说明-dump生成java堆转储快照。格式为:-dump:[live, ]format-b, file=, 其中live 子参数说明是否只输出dump 出存活的对象-finalizerinfo显示在 F-Queue 中等待 Finalizer 线程执行 finalize 方法的对象。-heap显示Java 堆详细信息,如使用那种回收器、参数配置、分代状况等。-histo显示堆中对象统计信息,包括类、实例数量、合计容量-permstat以ClassLoader 为统计口径显示永久代内存状态-F当虚拟机进程对 -dump 选项没有响应时,可使用这个选项强制生成 dump 快照。因JDK 版本不同,低版本中有部分选项只在 Linux/Solaris 下可以使用
示例:
jmap -dump:format=b,file=my.bin 3500运行成功之后,在浏览器访问: http://localhost:7000/ 就可以看到分析结果
jstack 命令用于生成虚拟机当前时刻的线程快照。
选项说明-F当正常的输出请求不被响应时,强制输出线程堆栈-l除堆栈外,显示关于锁的附加信息-m如果调用到本地方法的话,可以显示 C/C++ 的堆栈示例:
jstack -l 29116示例:
java -Dcom.sun.management.jmxremote.port=8096 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=106.14.xxx.xxx -jar security-0.0.1-SNAPSHOT.jar经测试,这种方式可以使用 JConsole 来连接
经过测试,这种方式可以使用 jvisualvm 来连接:
参考:https://blog.csdn.net/chwshuang/article/details/44202561