写点什么

JVM 诊断之 jps 工具使用

用户头像
hepingfly
关注
发布于: 2021 年 03 月 30 日
JVM  诊断之 jps  工具使用

一、概述

1、为什么要调优及监控


  • 防止出现 OOM 的情况

  • 出现 OOM 了,通过 JVM 调优去解决 OOM

  • 减少 Full GC 出现的频率


2、性能优化的步骤


1)、性能监控(发现问题)

包括以下几个方面:


  • GC 频繁

  • cpu load 过高

  • OOM

  • 内存泄漏

  • 死锁

  • 程序响应时间较长


2)、性能分析(排查问题)


  • 打印 GC 日志,通过 GCviewer 或者 http://gceasy.io 来分析日志信息

  • 灵活运用命令行工具,jstack ,jmap ,jinfo

  • dump 出堆文件,使用内存分析工具分析文件

  • 使用阿里 Arthas,或者 jconsole,JVisualVM 来实时查看 JVM 状态

  • jstack 查看堆栈信息


3)、性能调优(解决问题)


  • 适当增加内存,根据业务背景选择垃圾回收器

  • 优化代码,控制内存使用

  • 增加机器,分散节点压力

  • 合理设置线程池数量

  • 使用中间件提高程序效率,如缓存,消息队列等。


二、JVM 诊断工具

jps :查看正在运行的 Java 进程


1)、介绍


jps :Java Process Status 。

用于查询正在运行的虚拟机进程。


注:

对于本地虚拟机进程来说,进程的本地虚拟机 ID 与操作系统的进程 ID 是一致的,是唯一的。



2)、基本语法


jps [options] [hostid]

我们可以通过追加参数来打印额外信息


① options 参数


  • -q:仅仅显示 LVMID(local virtual machine id),即 本地虚拟机唯一 ID,不显示主类的名称。

jps -q2788280830053006
复制代码


  • -l :输出应用程序主类的全类名。或者,如果进行执行的是 jar 包,则输出 jar 的完整路径。

jps -l27883014 org.jetbrains.jps.cmdline.Launcher3015 com.hepingfly.monitor.Test3016 jdk.jcmd/sun.tools.jps.Jps2808 org.jetbrains.idea.maven.server.RemoteMavenServer
复制代码


  • -m :输出虚拟机进行启动时传递给主类 main() 方法的参数


jps -m27883063 Launcher /Applications/IntelliJ IDEA.app/Contents/lib/asm-all-7.0.1.jar:/Applications/IntelliJ IDEA.app/Contents/lib/commons-lang3-3.9.jar:/Applications/IntelliJ IDEA.app/Contents/lib/netty-buffer-4.1.47.Final.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/javac2.jar:/Applications/IntelliJ IDEA.app/Contents/lib/httpclient-4.5.12.jar:/Applications/IntelliJ IDEA.app/Contents/lib/plexus-component-annotations-1.7.1.jar:/Applications/IntelliJ IDEA.app/Contents/lib/maven-resolver-spi-1.3.3.jar:/Applications/IntelliJ IDEA.app/Contents/lib/util.jar:/Applications/IntelliJ IDEA.app/Contents/lib/platform-api.jar:/Applications/IntelliJ IDEA.app/Contents/lib/qdox-2.0-M10.jar:/Applications/IntelliJ IDEA.app/Contents/lib/netty-codec-4.1.47.Final.jar:/Applications/IntelliJ IDEA.app/Contents/lib/netty-common-4.1.47.Final.jar:/Applications/IntelliJ IDEA.app/Contents/lib/jna.jar:/Applications/IntelliJ IDEA.app/Contents/lib/trove4j.jar:/Applications/IntelliJ IDEA.app/Contents/lib/nanoxml-3064 Test hepingfly              // hepingfly 是Java应用程序 Test main 方法传入的参数2808 RemoteMavenServer3065 Jps -m
复制代码


  • -v :列出虚拟机进行启动时的 JVM 参数。比如 : -Xms20m -Xmx50m 是启动程序指定的 JVM 参数。

jps -v3075 Launcher -Xmx700m -Djava.awt.headless=true -Djdt.compiler.useSingleThread=true -Dpreload.project.path=/Users/shenheping/Documents/Personal-shp/2018/workspace/workspace-idea/interview3 -Dpreload.config.path=/Users/shenheping/Library/Application Support/JetBrains/IntelliJIdea2020.1/options -Dexternal.project.config=/Users/shenheping/Library/Caches/JetBrains/IntelliJIdea2020.1/external_build_system/interview3.3169c94c -Dcompile.parallel=true -Drebuild.on.dependency.change=true -Dio.netty.initialSeedUniquifier=-7562273079508223163 -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.country=CN -Didea.paths.selector=IntelliJIdea2020.1 -Didea.home.path=/Applications/IntelliJ IDEA.app/Contents -Didea.config.path=/Users/shenheping/Library/Application Support/JetBrains/IntelliJIdea2020.1 -Didea.plugins.path=/Users/shenheping/Library/Application Support/JetBrains/IntelliJIdea2020.1/plugins -Djps.log.dir=/Users/shenheping/Library/Logs/JetBrains/IntelliJIdea2020.1/build-log -Djps.fallback.jdk.home=/Applications/IntelliJ IDEA.app/Conte3076 Test -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:51103,suspend=y,server=n -javaagent:/Users/shenheping/Library/Caches/JetBrains/IntelliJIdea2020.1/captureAgent/debugger-agent.jar -Dfile.encoding=UTF-82788  -Xms128m -Xmx1024m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -XX:CICompilerCount=2 -Dsun.io.useCanonPrefixCache=false -Djdk.http.auth.tunneling.disabledSchemes="" -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Djdk.attach.allowAttachSelf=true -Dkotlinx.coroutines.debug=off -Djdk.module.illegalAccess.silent=true -XX:+UseCompressedOops -Dfile.encoding=UTF-8 -XX:ErrorFile=/Users/shenheping/java_error_in_idea_%p.log -XX:HeapDumpPath=/Users/shenheping/java_error_in_idea.hprof -javaagent:/Users/shenheping/.jetbrains/jetbrains-agent-v3.2.1.4255.9c8=51aaea47 -Djb.vmOptionsFile=/Users/shenheping/Library/Application Support/JetBrains/IntelliJIdea2020.1/idea.vmoptions -Didea.paths.selector=IntelliJIdea2020.1 -Didea.executable=idea -Didea.home.path=/Applications/IntelliJ IDEA.app/Contents -Didea.vendor.name=JetBrains3077 Jps -Denv.class.path=/Users/shenheping/Software-shp/2020/Java/jdk-11/Contents/Home/lib/tools.jar:/Users/shenheping/Software-shp/2020/Java/jdk-11/Contents/Home/lib/dt.jar:. -Dapplication.home=/Users/shenheping/Software-shp/2020/Java/jdk-11/Contents/Home -Xms8m -Djdk.module.main=jdk.jcmd2808 RemoteMavenServer -Djava.awt.headless=true -Dmaven.defaultProjectBuilder.disableGlobalModelCache=true -Xmx768m -Didea.maven.embedder.version=3.5.4 -Dmaven.ext.class.path=/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven-event-listener.jar -Dfile.encoding=UTF-8
复制代码


注:

如果某 Java 进程关闭了默认开启的 UsePerfData 参数(即使用参数 -XX:-UsePerfData),那么 jps 命令(以及 jstat)将无法探知该 Java 进程。


② hostid 参数

如果想要远程监控主机上的 java 程序,需要安装 jstatd

一般我们不会使用,都是在本地使用。


每天在视频号给你分享一个提升效率的小工具,感兴趣的可以关注一下哦

👇 👇 👇 👇


发布于: 2021 年 03 月 30 日阅读数: 13
用户头像

hepingfly

关注

视频号:hepingfly 分享干货,欢迎关注~ 2018.06.23 加入

B站程序员。目标是做一个有才华,身上有光的男人。

评论

发布
暂无评论
JVM  诊断之 jps  工具使用