调优 | 别再说你不会 JVM 性能监控和调优了

Hi ! 我是小小,今天是本周的最后一篇,本篇将会着重讲解关于 JVM 调优和性能监控方面的内容

常用工具

常用工具主要有 JDK 自带工具与 Arthas 这两种工具。

JDK 自带工具

jps 虚拟机进程状况工具

用于查看虚拟机进程状况的工具 命令示例

$ jps
15236 Jps
14966 Example1

jstat 虚拟机统计信息监视工具

用于查看虚拟机的堆内存,内存信息,类的装载和卸载信息等内容

显示堆内存信息

jstat -gc 14966
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT
2048.0 2048.0  0.0    0.0   12800.0   9345.8   34304.0    26638.8   5248.0 4971.3 640.0  554.9       2    0.032   2      0.049    0.082

每隔 1000 毫秒打印堆内存信息,打印十次

调优 | 别再说你不会 JVM 性能监控和调优了_第1张图片

查看类的装载和卸载信息

$ jstat -class 14966
Loaded  Bytes  Unloaded  Bytes     Time
   829  1604.4        0     0.0       0.37

Java 配置信息工具

查看JVM的启动参数

$ jinfo -flags 26472
VM Flags:
-XX:CICompilerCount=3 -XX:InitialHeapSize=52428800 -XX:MaxHeapSize=52428800 -XX:MaxNewSize=17301504 -XX:MinHeapDeltaBytes=524288 -XX:New

jstack Java 堆栈跟踪工具

调优 | 别再说你不会 JVM 性能监控和调优了_第2张图片即,对当前的内存生成相关的快照,用于保存相关的快照信息。

jmap Kava 内存映射工具

用于查看内存对象数量和内存空间占用调优 | 别再说你不会 JVM 性能监控和调优了_第3张图片

jhat 生成 html 类型的快照文件

$ jhat dump.hprof
Reading from dump.hprof...
Dump file created Sun May 03 17:09:07 CST 2020
Snapshot read, resolving...
Resolving 42293 objects...
Chasing references, expect 8 dots........
Eliminating duplicate references........
Snapshot resolved.
Started HTTP server on port 7000
Server is ready

启动后,在浏览器打开,http://localhost:7000/调优 | 别再说你不会 JVM 性能监控和调优了_第4张图片

jvisualvm & VisualVM: 堆转储快照分析工具

和上方命令一样,直接导出文件,而不是网站调优 | 别再说你不会 JVM 性能监控和调优了_第5张图片对象信息调优 | 别再说你不会 JVM 性能监控和调优了_第6张图片线程信息调优 | 别再说你不会 JVM 性能监控和调优了_第7张图片

jconsole: JVM 性能监控

启动用户界面用于进行性能监控调优 | 别再说你不会 JVM 性能监控和调优了_第8张图片启动成功以后调优 | 别再说你不会 JVM 性能监控和调优了_第9张图片

Arthas

阿里开源的Java诊断工具

安装

下载

wget https://alibaba.github.io/arthas/arthas-boot.jarjava -jar arthas-boot.jar

解压

unzip arthas-packaging-bin.zip

安装

sudo su adminrm -rf /home/admin/.arthas/lib/*cd arthas./install-local.sh

启动

./as.sh

help

调优 | 别再说你不会 JVM 性能监控和调优了_第10张图片

dashboard  实时数据面板

调优 | 别再说你不会 JVM 性能监控和调优了_第11张图片

thread 线程信息

调优 | 别再说你不会 JVM 性能监控和调优了_第12张图片

jad 反编译类

调优 | 别再说你不会 JVM 性能监控和调优了_第13张图片

watch 数据观测

调优

部署方式

调优 | 别再说你不会 JVM 性能监控和调优了_第14张图片

服务器经常出现卡顿

这是由于 Full GC 时间过长导致,原因一般是

  1. 新生代太小,对象提前进入老年代,触发 Full GC

  2. 老年代较大,一次 Full GC 时间较长

解决方案是 调小 NewRatio 的值,尽可能的减少对象进入老年代

调整内存占用

直接内存

调整 XX:MaxDirectMemorySize 避免发生   OutOfMemoryError: Direct buffer memory

线程堆栈

调整 -Xss 避免发生 StackOverflowError 或 OutOfMemoryError: unable to create new native thread

从 GC 角度解决新生代大量对象存活,Minor GC 时间过长

参数调整

-XX:SurvivorRatio=65536
-XX:MaxTenuringThreshold=0
-XX:AlwaysTenure

关于作者

我是小小,生于二线,活在一线的程序猿,我是小小,我们下期再见。

小明菜市场

推荐阅读

● 没想到 | 万万没想到 Java 中最重要的关键字竟然是这个

● 3W | 跟着小小学会这些 Java 工程师面试题,月薪至少 3 W

● 十年 | 在Java开发做了10年后,才学会此绝招,用于颠覆Java应用

● DJL | DJL 如何正确打开 [ 深度学习 ]

● 警惕 | 警惕,mybatis的size()方法竟然有坑!

给我个好看再走好吗?

你可能感兴趣的:(jvm,java,linux,python,jdk)