2021SC@SDUSC
这次我们继续分析proset部分的代码。
Proset上次我们分析了配置文件目录config部分的es配置文件elasticsearch.yml,下面我们继续对JVM 配置文件jvm.options进行分析。
jvm.optionsjvm.options是与JVM的配置有关的,下面我们具体分析一下。
我们首先要设置最小和最大JVM堆,并将它们的大小设置为相同的值。
-Xms1g -Xmx1g
Xms表示总堆空间的初始大小,Xmx表示总堆空间的最大大小。这里设置的堆的大小为1GB。
这里我们先对CMS收集器有一个简单的了解。CMS收集器是JAVA虚拟机中垃圾收集器的一种。它运行在JAVA虚拟机的老年代中,是基于“标记-清除”算法实现的。
-XX:+UseConcMarkSweepGC
开启CMS,对老生代采用并发标记交换算法进行GC,即垃圾回收。这里我们对新生代和老生代做一个简单的了解,它们是Java堆的不同区域,我们可以简单理解为新生代主要是用来存放新生的对象或者不是特别大的对象,而老生代主要存放那些在程序中经历了好几次回收仍然还活着或者特别大的对象。
-XX:CMSInitiatingOccupancyFraction=75
设定CMS在对内存占用率达到75%的时候开始GC。
-XX:+UseCMSInitiatingOccupancyOnly
用设定的回收阈值(上面指定的75%),如果不指定,JVM仅在第一次使用设定值,后续则自动调整。
-XX:+AlwaysPreTouch
在服务启动的时候将真实的分配物理内存给JVM。
-server
强制安装服务器虚拟机。
-Xss1m
显式设置堆栈大小。
-Djava.awt.headless=true
设置为Headless模式。Headless模式是系统的一种配置模式,在该模式下,系统缺少了显示设备、键盘或鼠标。
-Dfile.encoding=UTF-8
默认情况下确保UTF-8编码。
-Djna.nosys=true
始终使用我们提供的JNA而不是系统JNA。JNA全称Java Native Access,是一个建立在经典的JNI技术之上的Java开源框架。JNA提供一组Java工具类用于在运行期动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码。开发人员只要在一个java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射。
-Djdk.io.permissionsUseCanonicalPath=true
在JDK9上使用旧式文件权限。
-Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0
用于配置Netty的标志。Netty 是一个客户、服务器端的编程框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
-Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dlog4j.skipJansi=true
关于日志的一些参数说明。
-XX:+HeapDumpOnOutOfMemoryError
表示当JVM发生OOM,即内存不足时,自动生成DUMP文件。DUMP文件用于堆转储。当Java堆分配失败时会生成堆转储。堆转储是在JVM的工作目录中创建的。
之后我会继续分析proset和seahub部分的代码。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)