概述在这篇文章中,我们将一起看一下,一些常见的JAVA虚拟机的参数配置 。
堆内存 - Xms 和 Xmx配置堆内存配置,可以说是应用程序中,最常见的提升性能的参数配置 。
这就是为什么我们需要指定最大和最小堆内存配置:
-Xms<heap size>[unit] -Xmx<heap size>[unit]
在这里,unit 表示要初始化内存(用堆大小表示)的单元 。单位可以标记为“ g”代表 GB,“ m”代表 MB,“ k”代表 KB 。
例如,如果我们想给 JVM 分配最小的2gb 和最大的5Gb,我们需要写:
-Xms2G -Xmx5G
从 java8开始,Metaspace 的大小没有定义 。一旦它达到全局限制,JVM 会自动增加它,然而,为了克服任何不必要的不稳定性,我们可以设置 Metaspace 大小为:
-XX:MaxMetaspaceSize=<metaspace size>[unit]
在这里,metaspace size表示我们要分配给元空间的内存量 。
根据 Oracle 的参考指南,除了总的可用内存之外,第二大影响因素是为年轻代保留的堆的比例 。默认情况下,YG(年轻代) 的最小大小为1310 MB,最大大小不受限制 。
我们也可以显示的设置年轻代的大小:
-XX:NewSize=<young size>[unit] -XX:MaxNewSize=<young size>[unit]
垃圾收集为了提高应用程序的稳定性,选择正确的垃圾收集算法至关重要 。有四种类型的 GC 实现:
- Serial Garbage Collector 串行垃圾收集器
- Parallel Garbage Collector 并行垃圾收集器
- CMS Garbage Collector CMS垃圾收集器
- G1 Garbage Collector G1垃圾收集器
-XX:+UseSerialGC-XX:+UseParallelGC-XX:+USeParNewGC-XX:+UseG1GC
GC 日志【常见的JVM参数配置】为了严格监视应用程序的运行状况,我们应该始终检查 JVM 的垃圾收集性能 。最简单的方法是以可读的格式记录 GC 日志 。使用以下参数,我们可以记录 GC 活动:
-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=< number of log files > -XX:GCLogFileSize=< file size >[ unit ]-Xloggc:/path/to/gc.log
在这里,UseGCLogFileRotation 指定日志文件滚动策略,很像 log4j、 sl4j 等 。NumberOfGCLogfFles 表示可以为单个应用程序生命周期编写的日志文件的最大数量 。GCLogFileSize 指定文件的最大大小 。最后,loggc 表示它的位置 。这里需要注意的是,还有两个可用的 JVM 参数(- XX: + PrintGCTimeStamps 和-XX: + PrintGCDateStamps)可用于在 GC 日志中打印日期时间戳 。
例如,如果我们希望分配最多100个 GC 日志文件,每个文件的最大大小为50 MB,并希望将它们存储在‘/home/user/log/ ’位置,我们可以使用以下语法:
-XX:+UseGCLogFileRotation-XX:NumberOfGCLogFiles=10-XX:GCLogFileSize=50M -Xloggc:/home/user/log/gc.log
但是,问题是总是在后台使用一个附加的守护进程来监视系统时间 。这种行为可能会造成一些性能瓶颈; 这就是为什么在生产中最好不要使用这个参数的原因 。OOM的处理对于大型应用程序来说,遇到OOM是非常常见的,OOM会导致应用程序崩溃 。这是一个非常关键的场景,很难复制以解决问题 。
这就是为什么 JVM 提供了一些参数,这些参数将堆内存转储到一个物理文件中,以后可以用来查找内存泄漏:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./java_pid<pid>.hprof-XX:OnOutOfMemoryError="< cmd args >;< cmd args >" -XX:+UseGCOverheadLimit
这里有几点需要注意:- HeapDumpOnOutOfMemoryError: 这个参数表示如果发生OOM,则指示 JVM 将 heap 转储到物理文件
- HeapDumpPath: 这个参数表示要写入文件的路径, 文件名任意; 但是,如果 JVM 在名称中找到一个 pid 标记,导致内存不足错误的当前进程的进程 id 将会以Hprof 格式附加到文件名中
- OnOutOfMemoryError: 这个参数用于发出紧急命令,以便在内存不足的情况下执行; 在 cmd args 中应使用适当的命令 。例如,如果我们想在内存不足时重启服务器,我们可以设置参数:
-XX:OnOutOfMemoryError="shutdown -r"
- UseGCOverheadLimit: 该参数是一种策略,它限制在抛出 OutOfMemory 错误之前,在 GC 中花费的 VM 时间的比例
-d<OS bit>
Misc(其他一些参数)- -server: 表示启用 HotSpot 虚拟机, 该参数在64位系统中默认使用
推荐阅读
- 茶叶揉捻之学理,普洱茶揉捻工序的目的
- 茶叶与英国习俗,茶叶对英国社会产生的影响尤其深远
- 端茶送客人走茶凉否,国内茶业面临有名茶无名牌的状况
- Linux下几个与磁盘空间和文件尺寸相关的命令
- 橙子茶怎么做,蜂蜜橙子茶的做法
- 陈年蜜茶的功效与作用,陈年茶油的功效与作用
- 电脑蓝屏怎么办?你要的解决方案都在这里
- 丁香茶和蜂蜜起喝吗,百香果加蜂蜜的孕妇能喝吗会有影响吗
- 法国人饮茶的习俗,蒙舍蛮的品饮习俗
- 茶树精油简介,六安瓜片的存储方法