关于java:没有源码调试生产环境如何排除和优化-JVM

33次阅读

共计 1093 个字符,预计需要花费 3 分钟才能阅读完成。

生产环境中间接排查 JVM 的话,最简略的做法就是应用 JDK 自带的 6 个十分实用的命令行工具来排查。它们别离是:jps、jstat、jinfo、jmap、jhat 和 jstack,它们都位于 JDK 的 bin 目录下,能够应用命令行工具间接运行,其目录如下图所示:

接下来咱们来看看这些工具的具体应用。

jps(虚拟机过程情况工具)

jps(JVM Process Status tool,虚拟机过程情况工具)它的性能和 Linux 中的 ps 命令比拟相似,用于列出正在运行的 JVM 的 LVMID(Local Virtual Machine IDentifier,本地虚拟机惟一 ID),以及 JVM 的执行主类、JVM 启动参数等信息。语法如下:

应用实例:

jstat(虚拟机统计信息监督工具)

jstat(JVM Statistics Monitoring Tool,虚拟机统计信息监督工具)用于监控虚拟机的运行状态信息。例如,咱们用它来查问某个 Java 过程的垃圾收集状况,示例如下:

参数阐明如下表所示:

留神:年老代的 Edem 区满了会触发 young gc,老年代满了会触发 old gc。full gc 指的是革除整个堆,包含 young 区 和 old 区。

jstat 罕用的查问参数有:

jinfo(查问虚拟机参数配置工具)

jinfo(Configuration Info for Java)用于查看和调整虚拟机各项参数。语法如下:

其中 45129 是应用 jps 查问的 LVMID。咱们能够通过 jinfo -flag [+/-]name 来批改虚拟机的参数值,比方上面的示例:

jmap(堆快照生成工具)

jmap(Memory Map for Java)用于查问堆的快照信息。查问堆信息示例如下:

咱们也能够间接生成堆快照文件,示例如下:

jhat(堆快照剖析性能)

jhat(JVM Heap Analysis Tool,堆快照剖析工具)和 jmap 搭配应用,用于启动一个 web 站点来剖析 jmap 生成的快照文件。执行示例如下:

上述信息示意 jhat 启动了一个 http 的服务器端口为 7000 的站点来展现信息,此时咱们在浏览器中输出:http://localhost:7000/,会看到如下图所示的信息:

jstack(查问虚拟机以后的线程快照信息)

jstack(Stack Trace for Java)用于查看以后虚拟机的线程快照,用它能够排查线程的执行情况,例如排查死锁、死循环等问题。

比方,咱们先写一段死锁的代码:

以上程序的执行后果如下:

此时咱们应用 jstack 工具打印一下以后线程的快照信息,后果如下:

从上述信息能够看出应用 jstack,能够很不便地排查出代码中呈现“deadlock”(死锁)的问题。

正文完
 0