由于参数调优,遂整理JVM,工做调优+面试,都能帮你从容应对

关注公众号:Java架构师联盟,每日更新技术好文
部分资料已经上传到个人git仓库中:有须要的能够下载

最近由于工做和面试的缘由(大boss也不知道咋想的,把面试的任务给了我一部分,我以后是总监面,要了命了)那就跟随市场潮流吧,市场上什么比较火热,我就用什么技术问白,正好公司业务中最近也用到了jvm的相关的内容,因此也算是本身回忆复习,也算是总结吧,我把经常使用的jvm调优的参数进行整理,而且在最后,我将jvm所涉及的知识点进行了详细的整理java

Sun JDK 监控和故障处理工具

 

经常使用命令:

1. jps -l 查询LVMID,及主类的名称 C:\Users\Harry>jps -l 11856 com.ssm.common.jvm.JvmTest 14368 com.ddc.template.TemplateApplication 16848 19664 6640 org.jetbrains.jps.cmdline.Launcher 7732 sun.tools.jps.Jps 2168 org.apache.zookeeper.server.quorum.QuorumPeerMain 2. jps -v 输出虚拟机进程参数 C:\Users\Harry>jps -v 11856 JvmTest -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:49232 -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8 -Dfile.encoding=utf8 3. jstat -gc 11856 250 5 每250毫秒查询一次进程11856垃圾收集状况情况,一共查询5次 C:\Users\Harry>jstat -gc 11856 250 20 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 1024.0 1024.0 0.0 0.0 8192.0 7619.8 10240.0 0.0 4480.0 780.5 384.0 75.8 0 0.000 0 0.000 0.000 1024.0 1024.0 0.0 0.0 8192.0 7619.8 10240.0 0.0 4480.0 780.5 384.0 75.8 0 0.000 0 0.000 0.000 1024.0 1024.0 0.0 0.0 8192.0 7619.8 10240.0 0.0 4480.0 780.5 384.0 75.8 0 0.000 0 0.000 0.000 1024.0 1024.0 0.0 0.0 8192.0 7619.8 10240.0 0.0 4480.0 780.5 384.0 75.8 0 0.000 0 0.000 0.000 1024.0 1024.0 0.0 0.0 8192.0 7619.8 10240.0 0.0 4480.0 780.5 384.0 75.8 0 0.000 0 0.000 0.000 4. jstat -gc 11856 只查询一次 C:\Users\Harry>jstat -gc 11856 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 1024.0 1024.0 0.0 0.0 8192.0 7619.8 10240.0 0.0 4480.0 780.5 384.0 75.8 0 0.000 0 0.000 0.000 5. jstat -gcutil 11856 查询各JVM内存使用百分比 C:\Users\Harry>jstat -gcutil 11856 S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 0.00 0.00 93.01 0.00 17.42 19.75 0 0.000 0 0.000 0.000 6. jstat -gcnew 11856 查询新生代GC情况 C:\Users\Harry>jstat -gcnew 11856 S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT 1024.0 1024.0 0.0 0.0 15 15 0.0 8192.0 7619.8 0 0.000 7. jstat -gcold 11856 查询老年代GC情况 C:\Users\Harry>jstat -gcold 11856 MC MU CCSC CCSU OC OU YGC FGC FGCT GCT 4480.0 780.5 384.0 75.8 10240.0 0.0 0 0 0.000 0.000 8. jinfo -flag CMSInitiatingOccupancyFraction 11856 查询JVM参数的值 C:\Users\Harry>jinfo -flag CMSInitiatingOccupancyFraction 11856 -XX:CMSInitiatingOccupancyFraction=-1 9. jinfo -sysprops 11856 能够把System.getProperties()信息打印出来 C:\Users\Harry>jinfo -sysprops 11856 Attaching to process ID 11856, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.92-b14 java.runtime.name = Java(TM) SE Runtime Environment java.vm.version = 25.92-b14 ...... 10. jmap -dump:format=b,file=eclipse.bin 11856 生成java堆转储快照 C:\Users\Harry>jmap -dump:format=b,file=eclipse.bin 11856 Dumping heap to C:\Users\Harry\eclipse.bin ... Heap dump file created 11. jhat eclipse.bin 分析dump文件,浏览器中访问http://localhost:7000 C:\Users\Harry>jhat eclipse.bin Reading from eclipse.bin... Dump file created Sun Jul 22 11:55:08 CST 2018 Snapshot read, resolving... Resolving 11914 objects... Chasing references, expect 2 dots.. Eliminating duplicate references.. Snapshot resolved. Started HTTP server on port 7000 Server is ready. 12. jmap -heap 11856 查看堆中jvm参数状况 Attaching to process ID 11856, please wait... Debugger attached successfully. Server compiler detected. JVM version is 25.131-b11 using thread-local object allocation. Parallel GC with 8 thread(s) Heap Configuration: MinHeapFreeRatio = 0 MaxHeapFreeRatio = 100 MaxHeapSize = 1073741824 (1024.0MB) NewSize = 357564416 (341.0MB) MaxNewSize = 357564416 (341.0MB) OldSize = 716177408 (683.0MB) NewRatio = 2 SurvivorRatio = 8 MetaspaceSize = 21807104 (20.796875MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 0 (0.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 310902784 (296.5MB) used = 90540600 (86.34624481201172MB) free = 220362184 (210.15375518798828MB) 29.121836361555385% used From Space: capacity = 23068672 (22.0MB) used = 11927744 (11.37518310546875MB) free = 11140928 (10.62481689453125MB) 51.70537775213068% used To Space: capacity = 22544384 (21.5MB) used = 0 (0.0MB) free = 22544384 (21.5MB) 0.0% used PS Old Generation capacity = 716177408 (683.0MB) used = 82475416 (78.6546859741211MB) free = 633701992 (604.3453140258789MB) 11.516059439842035% used 13. jmap -dump:live,format=b,file=heap.hprof 11856 将heap.hprof传输出来到window电脑上使用mat工具分析。 14. jhat -heap 11856 显示java堆详细信息,如使用哪一种回收器、参数配置、分代情况等,只在linux平台才能够测试 15. jstack -l 11856 除堆栈外,显示锁的附加信息 "Finalizer" #3 daemon prio=8 os_prio=1 tid=0x00000000152da800 nid=0x18b4 in Object.wait() [0x000000001664e000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000ff608ee0> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143) - locked <0x00000000ff608ee0> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209) Locked ownable synchronizers: - None "Reference Handler" #2 daemon prio=10 os_prio=2 tid=0x00000000152b9000 nid=0x444c in Object.wait() [0x000000001654f000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <0x00000000ff606b50> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:502) at java.lang.ref.Reference.tryHandlePending(Reference.java:191) - locked <0x00000000ff606b50> (a java.lang.ref.Reference$Lock) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153) Locked ownable synchronizers: - None

这些基本涵盖了我在平常工做中用到的以及网上查找相关资料的时候,看到的不错的东西记录下来的,jvm的参数调优基本是能够应付正常的生活以及面试需求linux

固然了,只有这些是不够的,来看我准备的更全的资料吧git

 

须要这份思惟导图的,关注+转发后私信“资料”便可查看获取方式面试

第1章概念

介绍了Java虚拟机的概念、定义,讲解了Java 语言规范和Java虚拟机规范,最后,还介绍了OpenJDK的调试方法。算法

 

第2章虚拟机架构

介绍了Java虚拟机的整体架构,说明了堆、栈、方法区等内存空间的做用和彼此之间的联系。apache

 

 

第3章配置参数

介绍了Java 虚拟机的经常使用配置参数,重点对垃圾回收跟踪参数、内存配置参数作了详细的介绍,并给出了案例说明。设计模式

 

第4章垃圾回收算法--基础

从理论层面介绍了垃圾回收的算法,如引用计数、标记清除、标记压缩、复制算法等。本章是第5章的理论基础。浏览器

 

第5章垃圾回收算法--总结

讲解了基于垃圾回收的理论知识,进一步详细介绍了Java虚拟机中实际使用的各类垃圾回收器,包括串行回收器、并行回收器、CMS、G1等。多线程

 

须要这份思惟导图的,关注+转发后私信“资料”便可查看获取方式架构

第6章性能监控和诊断

介绍了Java虚拟机的性能监控和故障诊断工具,考虑到实用性,也介绍了系统级性能监控工具的使用,二者结合,能够更好地帮助读者处理实际问题。

 

第7章分析方法和案例

介绍了对Java堆的分析方法和案例,主要讲解了MAT和Visual VM两款工具的使用,以及各自OQL的编写方式。

 

第8章 内部锁

介绍了Java虚拟机对多线程,尤为是对锁的支持,本章不只介绍了虚拟机内部锁的实现、优化机制,也给出了一些Java语言层面的锁优化思路,最后,还介绍了无锁的并行控制方法。

 

第9章 Class文件结构

介绍了Java虚拟机的核心一Class 文件结构,Class 文件做为Java虚拟机的基石,有着举足轻重的做用,对深刻理解Java虚拟机有着不可忽视的做用。

 

第10章 类的装载

介绍了Java虚拟机中类的装载系统,其中,着重介绍了Java虚拟机中ClassLoader的实现以及设计模式。

 

第11章 执行系统和字节码

介绍了Java虚拟机的执行系统和字节码,为了帮助读者更快更好地理解Java字节码,本章对字节码进行了分类讲解,而且理论联系实际,给出了经过ASM框架进行字节码注入的案例。

 

关于jvm,不管是面试仍是工做中的性能调优,我今天为你们准备的资料,都能从其中找到相应的参考部分,但愿能为你们的工做和面试提供一点点的便利,我已经为你们整理好啦,更有视频讲解在其中,

有须要这些资料的老铁,关注+转发后,私信资料查看获取方式吧