一、概述
1、为什么要调优及监控
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 参数
jps -l
2788
3014 org.jetbrains.jps.cmdline.Launcher
3015 com.hepingfly.monitor.Test
3016 jdk.jcmd/sun.tools.jps.Jps
2808 org.jetbrains.idea.maven.server.RemoteMavenServer
复制代码
jps -m
2788
3063 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 RemoteMavenServer
3065 Jps -m
复制代码
jps -v
3075 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/Conte
3076 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-8
2788 -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=JetBrains
3077 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.jcmd
2808 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
一般我们不会使用,都是在本地使用。
每天在视频号给你分享一个提升效率的小工具,感兴趣的可以关注一下哦
👇 👇 👇 👇
评论