java调优


JDK监控和故障处理指令

链接

jps

JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。

jstat

JVM statistics Monitoring监控虚拟机运行时状态信息

C:\>jps -l -m
5216
12268 org.jetbrains.idea.maven.server.RemoteMavenServer36
15516 sun.tools.jps.Jps -l -m

C:\>jstat -class 12268
Loaded  Bytes  Unloaded  Bytes     Time
  4126  7519.7        0     0.0       1.06

C:\>jstat -gc 12268
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
 0.0   3072.0  0.0   3072.0 161792.0 18432.0   97280.0     3287.2   21504.0 20606.9 2560.0 2296.7      4    0.022   0      0.000    0.022

jmap

JVM Memory Map用于生产heap dump文件,或者-XX:+HeapDumpOnOutOfMemoryError参数让虚拟机出现OOM时自动生成dump文件。

jhat

JVM Heap Analysis Tool,与jmap搭配使用

jstack

生成虚拟机当前时刻的线程快照。

线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。

jinfo

JVM Configuration info实时查看和调整虚拟机运行参数

C:\>jinfo -flag MaxMetaspaceSize 12268
-XX:MaxMetaspaceSize=18446744073709486080

GC IDEA调优实战

image-20211228190514258

urw285pczz

原来:

image-20211228191958021

-Xmx2040m
-Xms128m
-XX:ReservedCodeCacheSize=512m
-XX:+UseG1GC
-XX:SoftRefLRUPolicyMSPerMB=50
-XX:CICompilerCount=2
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-ea
-Dsun.io.useCanonCaches=false
-Djdk.http.auth.tunneling.disabledSchemes=""
-Djdk.attach.allowAttachSelf=true
-Djdk.module.illegalAccess.silent=true
-Dkotlinx.coroutines.debug=off
-Dfile.encoding=UTF-8

调整内存控制垃圾回收频率:

image-20211228192200565

-Xmx1024m
-Xms1024m

尝试cms,竟然更快了。

image-20211228192908334

-Xmx1024m
-Xms1024m
-XX:ReservedCodeCacheSize=512m

-XX:+UseConcMarkSweepGC

类加载时间优化:

idea启动加载两万多个类,因为idea是常用的开发工具,经常很多人的使用,我们可以认为它的代码是安全的,是否符合当前虚拟机的要求,不会危害虚拟机的安全,所以我们使用参数-Xverify:none来禁用字节码的验证过程

image-20211228193229630

继续:链接