博客
关于我
GC调优常用工具基础工具和Arthas
阅读量:699 次
发布时间:2019-03-17

本文共 2276 字,大约阅读时间需要 7 分钟。

JDK命令工具详解

Java 开源工具包(JDK)为开发人员提供了一系列命令行工具,一些常用的包括 jpsjstatjmapjstackjinfo。这些工具在系统调试、性能分析和 bug定位 中都扮演着重要角色。本文将为您详细介绍这些工具的使用方法和注意事项。

基本命令工具

jps 是用于查看 Java 运行时环境中正在运行的进程的命令。它默认从操作系统的临时目录中查找进程信息,有时可能会显示不完整数据。在 Linux 上,可以通过以下命令查看实时进程信息:

代码示例:

jps -q

常用参数包括:

  • -q:仅显示进程 PID。
  • -m:显示主类的输入参数。
  • -l:显示主类的完整路径或 JAR 文件名。
  • -v:显示 JVM 的启动参数,如 -Xms-Xmx

jmap 主要用于生成 Java 堆转储快照(heapdump),这是排查内存泄漏和性能问题的重要工具。在 Linux 上,可以通过以下命令生成堆转储文件:

代码示例:

jmap -dump:live,format=b,file=heap.bin

jmap 还支持其他参数,如 `-heap` 用于显示堆配置信息,或 `-histo` 用于查看类实例数量和内存占用。如果需要对 jmap 结果进行分析,可以结合 jhat 工具:

代码示例:

jhat -dump file=heap.bin

jstack 用于生成当前虚拟机的线程快照,主要用于排查线程阻塞问题。在 Linux 上,可以通过以下命令获取线程堆栈信息:

代码示例:

jstack -l

jstack 也支持一些高级参数,如 `-i` 用于设置线程采样间隔(单位为毫秒)、`-n` 用于指定最忙的前 N 个线程,以及 `$-l` 用于显示线程的堆栈信息。

jinfo 是一个功能强大的工具,用于查看和修改 Java 虚拟机的系统属性和参数。在 Linux 上,可以通过以下命令查看 JVM 的详细参数:

代码示例:

jinfo -flags

如需查看特定参数的详细信息,可以使用 `-flag` 参数,例如 `jinfo -flag GC` 用于查看垃圾回收相关参数。

垃圾回收监控工具

jstat 是 monitor storyline 的其中一个成员,主要用于监控虚拟机的运行状态信息,包括垃圾回收、内存使用等方面的数据。在 Linux 上,可以通过以下命令统计垃圾回收信息:

代码示例:

jstat -gc 19064 1000 10

这里的 `19064` 是 JVM 的进程 ID,`-gc 1000 10` 表示每 1000 毫秒查询一次垃圾回收信息,共查询 10 次。通过 jstat,可以获取 S0C、S1C、S0U、S1U、EC、EU 等敏感信息。

值得注意的是,在生产环境中,使用 `jstat` 的效率通常需要优化,避免对远程服务器造成过多负载。

内存堆分析工具

除了 jmap 和 jhat 之外,还有其他工具可以用于分析 Java 堆的状态。例如,`jmap` 支持 `-heap` 参数,用于查看堆配置信息。在 Linux 上,可以通过以下命令获取堆详情:

代码示例:

jmap -heap

通过 `-heap` 参数可以查看堆的使用情况,包括新生代和老年代的容量、使用量以及使用比例等信息。

如果需要更详细的分析,可以结合 `jhat` 工具来查看堆转储文件中的具体信息。在 Linux 上,建议使用以下命令生成和分析堆dump:

代码示例:

jmap -dump:live,format=b,file=heap.binjhat -dump file=heap.bin

高级诊断工具

除了上述基本命令工具外,Arthas 是一个开源的 Java 诊断工具,由阿里巴巴开发。在 Linux、Mac 和 Windows 上都提供支持,非常适合生产环境的调试需求。Arthas 通过命令行交互模式和丰富的 Tab 自动补全功能,大大简化了调试流程。

安装和使用阿尔巴斯非常简单,只需下载并运行对应的 JAR 包即可。在生产环境中,可以通过以下命令快速启动阿尔巴斯并绑定目标进程:

代码示例:

java -jar arthas-boot.jar pid 1234

通过 Arthas,可以执行诸如 `thread`、`jvm`、`jad`、`trace` 和 `monitor` 等命令,实现对 JVM 和应用的全面分析和调优。

例如,要查看线程堆栈信息,可以使用 `thread` 命令,如下所示:

代码示例:

thread -n 5

这会显示当前 JVM 中最忙的前 5 个线程及其堆栈信息。

工具使用总结

在生产服务器上,建议开启以下 JVM 参数以支持调试工具:

  • -XX:-HeapDumpOnOutOfMemoryError:启用 OOM 备选方案。
  • -XX:HeapDumpPath=./java_pid.hprof:设置堆转储文件路径。
  • -XX:+PrintGC-XX:+PrintGCDetails-Xlogger:log/gc.log:开启 GC 记录功能。

对于长时间运行的生产环境,建议使用 `-XX:+PrintHeapAtGC` 和 `XX:+PrintGCTimeStamps` 等参数,以便进行详细分析和排查。

总之,JDK 提供的这些命令工具为开发人员提供了强大的诊断能力。在日常开发和生产环境中,可以灵活地结合这些工具,快速定位问题并优化应用性能。

转载地址:http://qhbez.baihongyu.com/

你可能感兴趣的文章
No 'Access-Control-Allow-Origin' header is present on the requested resource.
查看>>
NO 157 去掉禅道访问地址中的zentao
查看>>
no available service ‘default‘ found, please make sure registry config corre seata
查看>>
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
查看>>
no connection could be made because the target machine actively refused it.问题解决
查看>>
No Datastore Session bound to thread, and configuration does not allow creation of non-transactional
查看>>
No fallbackFactory instance of type class com.ruoyi---SpringCloud Alibaba_若依微服务框架改造---工作笔记005
查看>>
No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc
查看>>
No mapping found for HTTP request with URI [/...] in DispatcherServlet with name ...的解决方法
查看>>
No mapping found for HTTP request with URI [/logout.do] in DispatcherServlet with name 'springmvc'
查看>>
No module named 'crispy_forms'等使用pycharm开发
查看>>
No module named cv2
查看>>
No module named tensorboard.main在安装tensorboardX的时候遇到的问题
查看>>
No module named ‘MySQLdb‘错误解决No module named ‘MySQLdb‘错误解决
查看>>
No new migrations found. Your system is up-to-date.
查看>>
No qualifying bean of type XXX found for dependency XXX.
查看>>
No qualifying bean of type ‘com.netflix.discovery.AbstractDiscoveryClientOptionalArgs<?>‘ available
查看>>
No resource identifier found for attribute 'srcCompat' in package的解决办法
查看>>
no session found for current thread
查看>>
No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
查看>>