此页面是否是列表页或首页?未找到合适正文内容。
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 毫秒打印堆内存信息,打印十次
![4f0xtr1m2o3.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=32c43724-fd25-eb11-8da9-e4434bdf6706&url=https://www.dmozdir.org/Up/2020/11/14/4f0xtr1m2o3.jpg)
查看类的装载和卸载信息
$ 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 堆栈跟踪工具
即,对当前的内存生成相关的快照,用于保存相关的快照信息。
jmap Kava 内存映射工具
用于查看内存对象数量和内存空间占用
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/
jvisualvm & VisualVM: 堆转储快照分析工具
和上方命令一样,直接导出文件,而不是网站对象信息
线程信息
jconsole: JVM 性能监控
启动用户界面用于进行性能监控启动成功以后
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./
启动
./as.sh
help
![di4jv5gevr4.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=32c43724-fd25-eb11-8da9-e4434bdf6706&url=https://www.dmozdir.org/Up/2020/11/14/di4jv5gevr4.jpg)
dashboard ?实时数据面板
![0wvx1oaehy4.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=32c43724-fd25-eb11-8da9-e4434bdf6706&url=https://www.dmozdir.org/Up/2020/11/14/0wvx1oaehy4.jpg)
thread 线程信息
![rsevifo2z5g.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=32c43724-fd25-eb11-8da9-e4434bdf6706&url=https://www.dmozdir.org/Up/2020/11/14/rsevifo2z5g.jpg)
jad 反编译类
![ige2et1xuhb.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=32c43724-fd25-eb11-8da9-e4434bdf6706&url=https://www.dmozdir.org/Up/2020/11/14/ige2et1xuhb.jpg)
watch 数据观测
![ablvbyc4ubh.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=32c43724-fd25-eb11-8da9-e4434bdf6706&url=https://www.dmozdir.org/Up/2020/11/14/ablvbyc4ubh.jpg)
调优
部署方式
![ippudgc0yio.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=32c43724-fd25-eb11-8da9-e4434bdf6706&url=https://www.dmozdir.org/Up/2020/11/14/ippudgc0yio.jpg)
服务器经常出现卡顿
这是由于 Full GC 时间过长导致,原因一般是
新生代太小,对象提前进入老年代,触发 Full GC
老年代较大,一次 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()方法竟然有坑!
给我个好看再走好吗?
以上信息来源于网络,如有侵权,请联系站长删除。TAG:调优