JVM基础

一、目的

通过对线上jvm常见故障的用例的分析,提高大家对系统故障的分析和处理能力,减少系统由故障造成的宕机时间,提高系统的可用性。

二、JVM概况

jvm为java虚拟机的简称,在这里一般指Oralce旗下的Hotspot,在处理故障前首先必须了解JVM相关基础知识。在此简单介绍如下。

1.1.1     虚拟机的基本结构

JVM内存基本结构如下

各部分功能详细在此不重复描述,请自行百度或查阅相关书籍。

1.1.2     垃圾回收

回收算法、垃圾回收器与堆内存分配的相关参数

回收算法

1、Mark-Sweep(标记-清除)算法

2、Copying(复制)算法

3、Mark-Compact(标记-整理)算法

4、Generational Collection(分代收集)算法

以上算法具体过程及适用场景请自行百度或参考相关书籍。

垃圾回收器

1、Serial收集器

2、ParNew收集器

3、Parallel Scavenge收集器

4、Serial Old收集器

5、Parallel Old收集器

6、CMS收集器

7、G1收集器

以上垃圾回收器详细信息请自行百度或参考相关书籍。

堆内存分配参数

Jvm堆内存分配的几个重要参数,对应设置的内存区域,如图所示

配置参数

功能

-Xms

初始堆大小。如:-Xms256m

-Xmx

最大堆大小。如:-Xmx512m

-Xmn

新生代大小。通常为 Xmx 的 1/3 或 1/4。新生代 = Eden + 2 个 Survivor 空间。实际可用空间为 = Eden + 1 个 Survivor,即 90%

-Xss

JDK1.5+ 每个线程堆栈大小为 1M,一般来说如果栈不是很深的话, 1M 是绝对够用了的。

-XX:NewRatio

新生代与老年代的比例,如 –XX:NewRatio=2,则新生代占整个堆空间的1/3,老年代占2/3

-XX:SurvivorRatio

新生代中 Eden 与 Survivor 的比值。默认值为 8。即 Eden 占新生代空间的 8/10,另外两个 Survivor 各占 1/10

-XX:PermSize

永久代(方法区)的初始大小

-XX:MaxPermSize

永久代(方法区)的最大值

-XX:+PrintGCDetails

打印 GC 信息

-XX:+HeapDumpOnOutOfMemoryError

让虚拟机在发生内存溢出时 Dump 出当前的内存堆转储快照,以便分析用

-Xloggc

 

-XX:+PrintGCDateStamps 

 

-XX:+PrintGCApplicationStoppedTime 

 
   

-Djava.rmi.server.hostname

 

-Dcom.sun.management.jmxremote

 

-Dcom.sun.management.jmxremote.port

 

-Dcom.sun.management.jmxremote.ssl

 

-Dcom.sun.management.jmxremote.authenticate

 
   
原文地址:https://www.cnblogs.com/ken-jl/p/8998518.html