【JVM调优】JDK11-JVM基本参数调优以及日志打印

2023-11-04

Parm:

  1. -Xmx2g
  2. -Xms1g
  3. -Xss256k
  4. -XX:MaxDirectMemorySize=256m
  5. -XX:+UseG1GC
  6. -XX:+UseCompressedOops
  7. -XX:+UseCompressedClassPointers
  8. -XX:+SegmentedCodeCache
  9. -verbose:gc
  10. -XX:+PrintCommandLineFlags
  11. -XX:+ExplicitGCInvokesConcurrent
  12. -Xlog:gc*=debug:file=/data2/logs/portal_gc_log/portal_gc.log:utctime,level,tags:filecount=50,filesize=100M
  13. -Duser.timezone=GMT+11

服务器内存一共为4G

-Xms1g

初始堆大小设置为1G
默认值:物理内存的1/64(<1GB)
空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制.

-Xmx2g

最大堆大小设置为2G
物理内存的1/4(<1GB)
空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制

-Xss256k

每个线程的堆栈大小设置为256k
JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K.更具应用的线程所需内存大小进行 调整.在相同物理内存下,减小这个值能生成更多的线程.但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右,一般小的应用, 如果栈不是很深, 应该是128k够用的 大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。和threadstacksize选项解释很类似一般设置这个值就可以了。

-XX:MaxDirectMemorySize=256m

限制 JVM 使用的 直接内存 最大容量
ByteBuffer有两种:
heap ByteBuffer -> -XX:Xmx
1.一种是heap ByteBuffer,该类对象分配在JVM的堆内存里面,直接由Java虚拟机负责垃圾回收,
direct ByteBuffer -> -XX:MaxDirectMemorySize
2.一种是direct ByteBuffer是通过jni在虚拟机外内存中分配的。通过jmap无法查看该快内存的使用情况。只能通过top来看它的内存使用情况。
JVM堆内存大小可以通过-Xmx来设置,同样的direct ByteBuffer可以通过-XX:MaxDirectMemorySize来设置,此参数的含义是当Direct ByteBuffer分配的堆外内存到达指定大小后,即触发Full GC。注意该值是有上限的,默认是64M,最大为sun.misc.VM.maxDirectMemory(),在程序中中可以获得-XX:MaxDirectMemorySize的设置的值。

-XX:+UseG1GC

使用G1收集器 jdk11默认使用G1

特点:并行收集器(Parallel GC)可以压缩和回收old区的内存,但是只能对old区整体来操作。G1可以把整个工作增量的分散到多个时间更短的停顿中。这在减少停顿时间的同时会牺牲一部分吞吐量。

跟CMS类似,G1是并发的回收old区的内存,但是,CMS不会处理old区的碎片,最终就会导致长时间的FullGC。

由于并发的原因,G1可能会表现出比其他收集器更高的开销,这会影响吞吐量。

G1在任何的停顿都可以回收一些全空或者大量的old区的内存。这会避免不必要的GC,因为可以不费吹灰之力就可以释放大量的内存空间。

G1可以选择对整个堆里面的String进行并行去重。

JDK11新增
新的Epsilon垃圾收集器
ZGC

-XX:+UseCompressedOops

开启普通对象指针压缩 压缩对象Klass pointer 减少运行内存 减少gc耗时

-XX:+UseCompressedClassPointers

类指针压缩 开启了-XX:+UseCompressedOops 会默认开启此项 效果同上

-XX:+SegmentedCodeCache

可能需要配置

-XX:ReservedCodeCacheSize=251658240?一般240m

分段代码缓存 选择按照分段初始化
当Code Cache不足之后会导致编译线程无法继续,并且消耗大量CPU,导致系统运行变慢。

-verbose:gc

用于垃圾收集时的信息打印
-XX:+PrintGC 与 -verbose:gc 是一样的,可以认为-verbose:gc 是 -XX:+PrintGC的别名.
-XX:+PrintGCDetails 在启动脚本可以自动开启
-XX:+PrintGC , 如果在命令行使用jinfo开启的话,不会自动开启-XX:+PrintGC

-XX:+PrintCommandLineFlags

查看程序使用的默认jvm参数

-XX:+ExplicitGCInvokesConcurrent

打开此参数后,在做System.gc()时会做background模式CMS GC,即并行FULL GC,可提高FULL GC效率。注,该参数在允许systemGC且使用CMS GC时有效

-Xlog:gc*=debug:file=/data2/logs/portal_gc_log/portal_gc.log:utctime,level,tags:filecount=50,filesize=100M

日志打印
-Xlog:gc*=debug 指定debug级别日志打印
:file=指定路径
utctime 或者 utc UTC 时间
Level日志级别
Tags日志标签
output-options:filecount=50,filesize=100M这个表示保留 50 个文件,每个文件 100M

-Duser.timezone=GMT+11

指定时区

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【JVM调优】JDK11-JVM基本参数调优以及日志打印 的相关文章

随机推荐

  • ftp下载出现空文件,需要修改编码

    ftp下载出现空文件 需要修改编码 ftpClient retrieveFile new String ff getName getBytes gbk ISO 8859 1 is
  • Kafka集群的搭建以及java生产消费代码测试

    1 什么是Kafka 官网上 Kafka 用于构建实时数据管道和流式应用程序 它具有横向可扩展性 容错性 速度极快 在数千家公司的生产中运行 2 集群搭建准备 JDK Zookeeper集群 https blog csdn net qq 3
  • LDO原理简析

    LDO是低压差稳压器 并且是线性稳压器 只能用在降压的场景下 即输出电压只能比输入电压小 优点是负载响应快 并且十分稳定 纹波也比较小 缺点是输入电压和输出电压不能相差过大 负载也不能太大 并且效率较低 线性调节意谓着输入输出的电压差乘上平
  • Unity3D启动时卡在Loading界面

    首先说说我是怎么遇到这个问题的吧 当初是因为手贱无意中点了这个Sign out 退出当前用户 然后就一直卡在Loading界面死循环了 收集了一些网上的解决方法都不好使 难道是因为我是Mac系统的Unity 解决方案 一 Windows系统
  • 【待完善】python中调用 imread 报错: ImportError: cannot import name imread

    pip install Pillow 该问题排查有以下几种情况 未安装 Pillow库 scipy版本不对 ImportError cannot import name imread from scipy misc 是由于 imread i
  • 生成ltx文件命令_系统小技巧:实用简单的PowerShell命令

    从Windows 10 1703版开始 PowerShell取代了原命令提示符的位置 成为Windows管理的必备利器 然而许多普通Windows用户不知它的用途 其实 通过在PowerShell窗口中执行简单的命令 往往可以解决一些实际问
  • 2023/9/11 qt&c++

    include
  • LeetCode646.最长数对链

    题目描述 646 最长数对链 力扣 LeetCode 这是一道典型的贪心算法题 我们先对原数对进行排序 排序规则是按照数对的右边界值的大小进行升序排列 初始化变量end为升序后第一个数对的右边界值 这个数无疑是最小的右边界 之后依次遍历整个
  • Qt程序的打包和发布(使用windeployqt)

    将编写完成的Qt程序进行打包 使得没有安装Qt环境的电脑也可以运行编写完成的应用 1 Release文件生成 在Qt Creator中 将构建方式改为Release 点击运行 或ctrl r快捷键运行 2 找到exe文件 复制到一个空目录中
  • java单元测试之Mock静态方法

    用例子说明 例如有下面静态方法 public final class AmountUtil public static String CustomFormatWith2Digits int amount return 1 单元测试代码 需要
  • 服务器端虚拟化安卓,安卓服务器端实例

    安卓服务器端实例 内容精选 换一换 本章节以Linux操作系统为例 指导您通过内网IP的方式连接GaussDB for Redis 实例 目标实例必须与弹性云服务器在同一个虚拟私有云和子网内才能访问 弹性云服务器必须处于目标实例所属安全组允
  • vscode和vs有什么区别?

    vscode是微软新推出的一款代码编辑器 内置了一些编译器 免费开源跨平台的工具 VS是微软的商业企业级开发环境IDE 在这之前 我们写代码的工具可以分为三个层次 最轻量级的叫做代码编辑器 例如notepad notepad subline
  • OD查看字符串

    在反汇编窗口中右击 出来一个菜单 我们在 查找 gt 所有参考文本字串 上左键点击 在text string窗口后 再右击这个窗口里面随便一处 选 search for text 输入要查找的内容 把Case sensitive 区分大小写
  • 【RoCE】拥塞控制机制(ECN, DC-QCN)

    1 网络拥塞问题 在网络交换机中 当入口流量大于出口流量的带宽时会发生网络拥塞 典型的例子是多个发送方同时向同一个目的地发送网络数据 交换机的缓存可以处理暂时的拥塞 但是当拥塞太久时 交换机的缓存就会过载 当交换机缓存过载时 下一个收到的新
  • mysql ipk 编译_OpenWrt的ipk包安装

    在 make menuconfig 进行裁减 OpenWrt 时 为了让系统更精小一点 我们会把部分功能以 模块 的方式编译 即不编入内核 只是在后期用户可以进行安装与卸载 包安装示例 如下关于Lua的配置项 其中 json4lua lua
  • 头文件库文件

    问题 不知道 Visual Studio 的头文件库文件如何配置 方法 C C gt 常规 gt 附加包含目录 添加头文件 链接器 gt 常规 gt 附加库目录 添加库目录 链接器 gt 输入 gt 附加依赖项 添加库文件
  • zip文件解压详解

    文章目录 1 起因 2 详解 3 实践 4 参考 1 起因 自己之前在linux系统解压zip文件 一直用 unzip zip 我们期望解压后的文件都是统一放到以 命名的文件夹下 但是自己有一次解压后发现所有的文件并没有放到上述文件夹下 而
  • 使用 @RequestMapping 注解,需要导入的包:spring-webmvc

    在Controller 层使用 RequestMapping注解 需要导入的包 spring webmvc 在类中需要添加 import org springframework web bind annotation RequestMapp
  • Pycharm激活方法使用的是(license server)Activate new license with: License server

    pycharm所有版本 http www jetbrains com pycharm download previous html 打开激活窗口 选择 Activate new license with License server 用li
  • 【JVM调优】JDK11-JVM基本参数调优以及日志打印

    Parm Xmx2g Xms1g Xss256k XX MaxDirectMemorySize 256m XX UseG1GC XX UseCompressedOops XX UseCompressedClassPointers XX Se