JVM调优调的是什么?是寂寞吗?
时间:2022-07-28
本文章向大家介绍JVM调优调的是什么?是寂寞吗?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
不,是GC。
gc永远会是Java程序员需要考虑的不稳定因素之一。对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数。
而GC的情景复杂又复杂,为了能更深刻的了解内存模型,参考《深入java虚拟机理解》,不定期更新JVM入门。
我自己遇到过一次内存泄漏,但不是线上环境,本地环境出现过一次,后来重新推包解决了,没有复现,那么平时的自用服务器突然内存与磁盘IO暴增,你会如何调优?定位到具体线程后,是因为大对象占用空间造成,还是程序死循环了你如何解决?,关于JVM入门,以及JVM调优整理了地址请转至
https://kkget.github.io/2020/09/24/JVM调优相关
https://kkget.github.io/2020/10/13/JVM从入门到放弃
以上内容不定期更新,今天主要从性能监控工具以及整理关于调优相关部分。
虚拟机性能监控工具
1.jps(JVM Porcess Status Tool)
功能:列出正在运行的虚拟机程序并显示执行主类名称以及进程ID(LVMID ,Local Virtiual Machine Identifier)。
jps -l 输出主类的全类名
jps -v 输出虚拟机启动时的JVM参数
格式 jps [ options ] [ hostid ]
[root@zhaokk shell]# jps -v
2288193 Jps -Denv.class.path=$:CLASSPATH:/opt/soft/jdk/jdk1.8.0_261/lib/ -Dapplication.home=/opt/soft/jdk/jdk1.8.0_261 -Xms8m
2171556 jar -Xmx1024m
2195236 jar -Xmx1024m
2172742 jar -Xmx1024m
1351582 jar -Xmx1024m
2136682 jar -Xmx1024m
2236393 jar
2240457 jar -Xmx1024m
2135436 jar -Xmx1024m
2286668 jar -Xmx1024m
3087 jar -Xmx1024m
2160978 jar -Xmx1024m
2176083 jar -Xmx1024m
2287761 jar
2196085 jar -Xmx1024m
2.jstat(JVM Statistics Monitoring Tool)
jstat [option vmid]
jstat -gc 2764 250 20
[root@zhaokk shell]# jstat -gc 1477 250 20
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
1536.0 1536.0 0.0 110.5 12480.0 2207.5 31084.0 24310.8 24320.0 23552.8 2560.0 2340.8 259 0.589 1 0.051 0.640
1536.0 1536.0 0.0 110.5 12480.0 2207.5 31084.0 24310.8 24320.0 23552.8 2560.0 2340.8 259 0.589 1 0.051 0.640
1536.0 1536.0 0.0 110.5 12480.0 2207.5 31084.0 24310.8 24320.0 23552.8 2560.0 2340.8 259 0.589 1 0.051 0.640
1536.0 1536.0 0.0 110.5 12480.0 2207.5 31084.0 24310.8 24320.0 23552.8 2560.0 2340.8 259 0.589 1 0.051 0.640
1536.0 1536.0 0.0 110.5 12480.0 2207.5 31084.0 24310.8 24320.0 23552.8 2560.0 2340.8 259 0.589 1 0.051 0.640
1536.0 1536.0 0.0 110.5 12480.0 2207.5 31084.0 24310.8 24320.0 23552.8 2560.0 2340.8 259 0.589 1 0.051 0.640
1536.0 1536.0 0.0 110.5 12480.0 2207.5 31084.0 24310.8 24320.0 23552.8 2560.0 2340.8 259 0.589 1 0.051 0.640
1536.0 1536.0 0.0 110.5 12480.0 2207.5 31084.0 24310.8 24320.0 23552.8 2560.0 2340.8 259 0.589 1 0.051 0.640
1536.0 1536.0 0.0 110.5 12480.0 2207.5 31084.0 24310.8 24320.0 23552.8 2560.0 2340.8 259 0.589 1 0.051 0.640
1536.0 1536.0 0.0 110.5 12480.0 2207.5 31084.0 24310.8 24320.0 23552.8 2560.0 2340.8 259 0.589 1 0.051 0.640
jstat -gcutil 2764
[root@zhaokk shell]# jstat -gcutil 1477
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 7.19 19.05 78.21 96.85 91.44 259 0.589 1 0.051 0.640
3.jinfo java配置信息(Configuration Info for java)
格式 jinfo [option] pid
4.jmap (Memory Map for java) java内存映射工具
格式 jmap [option] vmid
jmap -heap
[root@zhaokk shell]# jmap -heap 1477
Attaching to process ID 1477, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.11-b03
using thread-local object allocation.
Mark Sweep Compact GC
Heap Configuration:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 482344960 (460.0MB)
NewSize = 1310720 (1.25MB)
MaxNewSize = 160759808 (153.3125MB)
OldSize = 30146560 (28.75MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
New Generation (Eden + 1 Survivor Space):
capacity = 14352384 (13.6875MB)
used = 4124624 (3.9335479736328125MB)
free = 10227760 (9.753952026367188MB)
28.738250035673516% used
Eden Space:
capacity = 12779520 (12.1875MB)
used = 4011512 (3.8256759643554688MB)
free = 8768008 (8.361824035644531MB)
31.390161758814102% used
From Space:
capacity = 1572864 (1.5MB)
used = 113112 (0.10787200927734375MB)
free = 1459752 (1.3921279907226562MB)
7.19146728515625% used
To Space:
capacity = 1572864 (1.5MB)
used = 0 (0.0MB)
free = 1572864 (1.5MB)
0.0% used
tenured generation:
capacity = 31830016 (30.35546875MB)
used = 24894208 (23.740966796875MB)
free = 6935808 (6.614501953125MB)
78.20985072706216% used
15847 interned Strings occupying 1391576 bytes.
5.jhat (JVM Heap Analysis Tool)虚拟机堆转快照分析工具 用的比较少
6.jstack java堆栈追踪工具(stack Trace for java) 生成当前的线程快照
格式 jstack [option] vmid
[root@zhaokk bin]# jstack -l 1477
2020-10-20 15:40:50
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.11-b03 mixed mode):
"Attach Listener" #27 daemon prio=9 os_prio=0 tid=0x00007fc928003800 nid=0x446f waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"http-bio-8080-AsyncTimeout" #25 daemon prio=5 os_prio=0 tid=0x00007fc95039f000 nid=0x5de waiting on condition [0x00007fc92d0cb000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at org.apache.tomcat.util.net.JIoEndpoint$AsyncTimeout.run(JIoEndpoint.java:153)
at java.lang.Thread.run(Thread.java:745)
Locked ownable synchronizers:
- None
"http-bio-8080-Acceptor-0" #24 daemon prio=5 os_prio=0 tid=0x00007fc95039d800 nid=0x5dd runnable [0x00007fc92d1cc000]
java.lang.Thread.State: RUNNABLE
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:404)
at java.net.ServerSocket.implAccept(ServerSocket.java:545)
at java.net.ServerSocket.accept(ServerSocket.java:513)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)
at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:223)
at java.lang.Thread.run(Thread.java:745)
Locked ownable synchronizers:
亦可通过java程序Thread.getAllstackTraces();获得
可视化故障处理工具
Jconsole JHSDB Visual VM JMC
个人常用Jconsole ,Visual VM.
临时有活整理到这...后续有时间再整理
- SAP彭俊松:工业4.0软件架构和实施路线的探讨
- d3.js在博客园中的展示例子
- nuget服务器搭建,以及如何发布一个Nuget包
- knockoutjs 上自己实现的flux
- 简单实现 C# 与 Javascript的兼容
- Oozie分布式工作流——从理论和实践分析使用节点间的参数传递
- 如何写好CSS系列之表单(form)
- 2017年Dataversity 最受欢迎文章 Top 20 榜单
- “自如”获40亿融资,组合域名用的妙
- D3、openlayers的一次尝试
- 对快速排序算法的分析
- 如何写好css系列之button
- Oozie分布式工作流——Action节点
- mockjs,json-server一起搭建前端通用的数据模拟框架
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Linux提权姿势一:滥用SUDO提权
- Linux提权姿势二:利用NFS提权
- 统计回归拟合方程参数
- biomaRt包实现不同物种之间同源基因转换
- 使用OpenCV和Python标记超像素色彩
- 听说,你的Loki还是单体?(上篇)
- 加一
- APP自动化测试系列之Appium介绍及运行原理
- 没想到吧,Markdown 还能这么玩!
- 致敬Vue3: 1.1万字从零解读Vue3.0源码响应式系统
- APP自动化测试系列之Desired Capabilities详解
- Kafka分区分配策略(Partition Assignment Strategy)
- 内网渗透-代理篇(一)
- java学习应用篇|逃不掉的HelloWorld
- java学习原理篇|java程序运行套路